1

教科書でこの例の概念を理解するのに苦労しています。アイデアは、赤、黄、緑のライトで信号機を描くことです。いくつか質問があります。コードのどの部分が何をするのか理解するのに苦労しています。

  1. 私はページの中心を想定cxcyて理解する権利がありますか?
  2. fxフレームの中心をfy把握するのですか?
  3. 何が起こっているのかdy、なぜそれが3つのライトに対して3ではなく4で割られているのかわかりませんが、LAMP_RADIUS完全に混乱しています。
  4. 赤、黄、緑の3つすべてadd(createFilledCircle)で、信号機のフレーム内でそれらの位置がどのように計算されるのかわかりません。
  5. 方法createFilledCircle()ではわかりませんGOval circle = newGOval(x-r, y-r, 2 * r, 2 * r);x-r私はそれが何をし、何をy-rし、それがどのようにポジションに関係するのか理解していません。
import acm. graphics.*;
import acm. program.*;
import java.awt.*;

public class DrawStoplight extends GraphicsProgram {

    public void run () {
        double cx = getWidth() / 2;
        double cy = getHeight() / 2; 
        double fx = cx - FRAME_WIDTH / 2; 
        double fy = cy- FRAME_HEIGHT / 2; 
        double dy = FRAME_HEIGHT / 4 + LAMP_RADIUS / 2; 
        GRect frame = new GRect(fx, fy, FRAME_WIDTH, FRAME_HEIGHT);
        frame.setFilled(true);
        frame.setColor(Color.GRAY);
        add(frame);
        add(createFilledCircle(cx, cy - dy, LAMP_RADIUS, Color.RED));
        add(createFilledCircle(cx, cy, LAMP_RADIUS, Color.YELLOW));
        add(createFilledCircle(cx, cy + dy, LAMP_RADIUS, Color.GREEN));
    }

    private GOval createFilledCircle(double x, double y, double r, Color color){
        GOval circle = new GOval(x-r, y-r, 2 * r, 2 * r)
        circle.setColor(color);
        circle.setFilled(true);
        return circle;
    }

    private static final double FRAME_WIDTH = 50; 
    private static final double FRAME_HEIGHT = 100; 
    private static final double LAMP_RADIUS = 10; 

}
4

2 に答える 2

1

ページの中心を想定cxcyて把握するのは正しいでしょうか?

はい

fxフレームの中心をfy把握するには?

いいえ、左上の座標です

dy が何をするのか、なぜ 3 つのライトに対して 3 ではなく 4 で割るのかがわかりませLAMP_RADIUSん。完全に混乱します。

ボックス内に垂直に 3 つのライトを収めるには、中央に 1 つ、高さ 1/4 に 1 つ、高さ 3/4 に 1 つが必要です。つまり、4 で割ります。が入ってくる理由がわかりませLAMP_RADIUSん。ランプの間隔を広くするために、私が通常「ファッジ ファクター」と呼んでいるもの、つまり正しく見える図形のように見えますが、正しく見える正当な理由はありませ...

赤、黄、緑の 3 つすべてadd(createFilledCircle)で、信号フレーム内での位置がどのように計算されるのかわかりません。

それらは垂直方向にdy

方法createFilledCircle()がわかりませんGOval circle = newGOval(x-r, y-r, 2 * r, 2 * r);x-rと が何をy-rし、それが位置にどのように関係するかを理解していません。

サイズの座標で定義GOvalされたボックス内に円を配置します。つまり、(x - r, y - r)2r2r(x, y)

于 2012-10-15T23:47:31.090 に答える
1
1. Am I right to assume cx and cy are to figure out the center of the page?

はい

2. Are fx and fy to figure out the center of the frame?

ではない正確に。フレームの左上隅を計算しています。中央から開始し、各方向にフレーム サイズの半分ずつ「バックアップ」します。

3. I don't know what dy does and why it's divided by 4 and not 3 for 3 lights and the LAMP_RADIUS totally confuses me. 

コードのさらに下を見てください。 dyライト間の垂直距離です。黄色の光は正確に中央に描かれ、赤はdy上に、緑はdy下に描かれています。除数は4、作​​成者が赤いライトの下端をフレームの上部からフレームの高さの 1/4 の位置に揃えることを選択したためです。同様に、彼は緑色のライトの上部を、下部からフレームの高さの 1/4 の位置に揃えることを選択しました。彼は他の多くの計算方法を選択できたはずdyです。

4. On all three add(createFilledCircle) for red, yellow and green I don't understand how their position is calculated inside the stoplight frame. 

それらはすべて同じ x 座標 (フレームの中心) を持っています。y 座標は、3 で説明したように計算されます。スクリーン座標では、正の方向が下であることを思い出してください。したがって、y を大きくするとライトが低くなります。下げると高くなります。

5. In the method createFilledCircle() I don't understand GOval circle = newGOval(x-r, y-r, 2 * r, 2 * r);. I don't understand what x-r and y-r does and how that relates to position.

newGOval のマニュアル定義を読んでください。長方形の中に楕円形を内接します。パラメータは、長方形の左上隅とそれに続く幅と高さです。したがって、(x,y) が中心の場合、(xr, yr) から (x+r, y+r) への対角線を持つボックスが得られます。その中に楕円を内接すると、必要に応じて (x,y) を中心とする円が得られます。

于 2012-10-15T23:58:16.953 に答える