我几乎在那里进行锻炼,我必须为上课做。 我应该在对角线上创建一个单独的for循环创建椭圆。我的代码显示,但是我无法弄清楚为什么右上角的最后一个椭圆没有显示..我错过了什么?
size(400,400);
for( int x = 0; x <= 2; x++)
{
ellipse(0 + x * 200 , 0 + x * 200 , 50, 50);
ellipse(0 + x * 200, 400 + x * 200, 50, 50);
}
答案 0 :(得分:0)
只要想一想你的两个ellipse()
陈述在做什么:
ellipse(0 + x * 200 , 0 + x * 200 , 50, 50);
:这个在左上角绘制一个椭圆,然后在中心绘制一个椭圆,然后在右下角绘制一个椭圆。
ellipse(0 + x * 200, 400 + x * 200, 50, 50);
:这个在左下角绘制一个椭圆。但是它绘制的其他2个椭圆将位于屏幕边缘之下!
请记住Y值在窗口顶部从零开始。
尝试在for循环中使用println()
语句,以真正了解正在发生的事情。如果仍然无法解决问题,请先尝试不使用for循环。你可以打电话给ellipse()
功能5次吗?如果你有这个工作,那么看看你传入的坐标,直到你看到一个你可以在for循环中使用的模式。
答案 1 :(得分:0)
这听起来有点令人困惑,因为有不同的方法可以做同样的事情。到目前为止看起来你熟悉的循环很棒。
唯一看起来缺少的是计算出值的反转。
从0到2计算:
for( int x = 0; x <= 2; x++)
为x提供值0,1,2
,这在绘制左上角到右下角时很有用,因为它匹配坐标系(左上角为0,0)。
要从左下角到右上角绘制对角线,您需要不同的值 所以而不是
(0,0)
(1,1)
(2,2)
你需要:
(0,2)
(1,1)
(2,0)
在一个范围内获得反向值的一种方法是从该范围的最大值范围内减去一个值。
这是一个非常基本的草图来说明这个概念:
strokeWeight(10);//make points large/easy to see
int max = 2;
for(int x = 0 ; x <= max; x++){
float offset = x * 25;//spacing of 25
int reverseX = max - x;
float reverseOffset = reverseX * 25;
println("iteration " + x + " inverse iteration value: " + reverseX + " offset: " + offset + " reverseOffset: " + reverseOffset);
// point(offset,offset);
point(reverseOffset,offset);
}
另一个选择是在for循环中使用两个计数器。 希望你的任务不认为这是一个骗子,它可能看起来更令人困惑,但它不是太糟糕。
for(int x = 0, y = 3 ; x <= 3; x++, y--){
println("iteration " + x + " reverse iteration: " + y);
point(x * 25,y * 25);
}
for循环中唯一改变的部分是第一个(初始化)和最后一个(迭代)步骤。您正在初始化2个变量而不是一个:
在增量步骤中,您将处理两个变量: