Java 这段代码是如何绘制红、黄、绿灯的红绿灯的?
在我的课本中,我很难理解这个例子的概念。这个想法是画一个红、黄、绿三色的红绿灯。我有几个问题。我很难弄清楚代码的哪一部分起什么作用Java 这段代码是如何绘制红、黄、绿灯的红绿灯的?,java,Java,在我的课本中,我很难理解这个例子的概念。这个想法是画一个红、黄、绿三色的红绿灯。我有几个问题。我很难弄清楚代码的哪一部分起什么作用 我假设cx和cy是要计算页面的中心,对吗 fx和fy是否用于计算框架的中心 我不知道dy是做什么的,也不知道为什么它被4除,而不是3除,3个灯,灯的半径完全把我弄糊涂了 在所有三个add(createFilled圆圈)上,对于红色、黄色和绿色,我不明白它们在红绿灯框内的位置是如何计算的 在方法createFilledCircle()中,我不理解GOval circl
cx
和cy
是要计算页面的中心,对吗fx
和fy
是否用于计算框架的中心灯的半径
完全把我弄糊涂了李>
add(createFilled圆圈)
上,对于红色、黄色和绿色,我不明白它们在红绿灯框内的位置是如何计算的李>
createFilledCircle()
中,我不理解GOval circle=newGOval(x-r,y-r,2*r,2*r)代码>。我不明白x-r
和y-r
的作用,以及它们与位置的关系李>
导入acm。图形。*;
进口acm。方案*;
导入java.awt.*;
公共类DrawStoplight扩展图形程序{
公开作废运行(){
双cx=getWidth()/2;
double cy=getHeight()/2;
双fx=cx-帧宽度/2;
双fy=cy-框架高度/2;
双dy=框架高度/4+灯半径/2;
GRect frame=新GRect(外汇、财政、帧宽、帧高);
frame.setFilled(true);
框。设置颜色(颜色。灰色);
添加(框架);
添加(createFilledCircle(cx,cy-dy,LAMP_半径,Color.RED));
添加(createFilledCircle(cx、cy、灯_半径、颜色.黄色));
添加(创建填充圆(cx,cy+dy,灯的半径,颜色.绿色));
}
private GOval createFilledCircle(双x、双y、双r、彩色){
GOval循环=新GOval(x-r、y-r、2*r、2*r)
圆。设置颜色(颜色);
圆圈。设置填充(真);
返回圈;
}
专用静态最终双帧_宽度=50;
专用静态最终双框_高度=100;
专用静态最终双灯_半径=10;
}
我假设cx
和cy
是要计算页面的中心,对吗
对
fx
和fy
是否用于计算框架的中心
不,它们是左上角的坐标
我不知道dy是做什么的,为什么它被4除,而不是3除,3个灯,LAMP\u RADIUS
完全把我搞糊涂了
在一个盒子里垂直安装三盏灯,你需要一个在中间,一个在1/4个高度,一个在3/4个高度,因此除以四。我不确定为什么灯的半径
会进入它。这似乎是我通常所说的“模糊因素”,使灯的间距更大,即一个看起来正确的数字,但没有任何好的理由说明它看起来正确
在所有三个add(createFilled圆圈)
上,对于红色、黄色和绿色,我不明白它们在红绿灯框内的位置是如何计算的
它们的垂直间隔为dy
在方法createFilledCircle()
中,我不理解GOval circle=newGOval(x-r,y-r,2*r,2*r)代码>。我不明白x-r
和y-r
的作用,以及它们与位置的关系
GOval
在框内放置一个圆圈,该圆圈由坐标(x-r,y-r)
定义,大小为2r
——即边长的平方2r
位于(x,y)
对
不完全是。他们正在计算帧的左上角。它们从中心开始,在每个方向上“后退”帧大小的一半
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帧高度的点对齐。他本可以选择许多其他的计算方法
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)是中心,这是一个带对角线(x-r,y-r)到(x+r,y+r)的盒子。当你在上面刻一个椭圆时,你会得到一个以(x,y)为中心的圆,这是你想要的。非常感谢。我只是忘记或不记得坐标是由数字和圆的左上角计算出来的。这让我对正在进行的计算感到困惑。谢谢你的解释。我在这个问题上遇到了很多麻烦,因为我忘了左上角是如何计算坐标的。
4. On all three add(createFilledCircle) for red, yellow and green I don't understand how their position is calculated inside the stoplight frame.
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.