【软件构造】java使用海龟绘图绘制黄金分割曲线
java的海龟绘图是一个建议的绘图库,只能提供了简易的绘制直线和画笔转向的函数接口。我尝试使用海龟绘图绘制黄金分割曲线
首先,让画笔由小到大重复绘制黄金比例的长方形,每次循环边长的比例都增大1/0.618倍,效果如图所示: 源代码:
double gold = 0.618;// 黄金分割
double a=15;
double b = 1;
for (PenColor e : PenColor.values()) {
//每次循环改变画笔颜色,
turtle.color(e);
turtle.forward((int) a); turtle.turn(90); turtle.forward((int) b);
turtle.turn(90); turtle.forward((int) a); turtle.turn(90); b=a; a=a/gold;
if(e==PenColor.CYAN) break; }
turtle.draw();
然后尝试绘制曲线,可以用多边形代替圆。我选用40边形,效果如下: 源代码:
for (PenColor e : PenColor.values())// 以40边形代替圆形,画出黄金螺旋
{
turtle.color(e);
for (int j = 0; j < sides / 4; j++)// 四分之一个圆
{
turtle.turn(angle);
f = (int) b;
if (b - (int) b > 0.5)
f += 1;
turtle.forward(f);
}
b = b / gold;
// f=(int)r; if(r-(int)r>0.5) f+=1; for(int k=0;k<4;k++) { turtle.turn(90.0);
// turtle.forward(f); } r=r/gold;
}
turtle.draw();
但当我想将两者结合起来,也就是使得每个四分之一圆都被一个正方形包裹住,就出现了问题,未能解决: 源代码:
for (PenColor e : PenColor.values())// 以40边形代替圆形,画出黄金螺旋
{
turtle.color(e);
for (int j = 0; j < sides / 4; j++)// 四分之一个圆
{
turtle.turn(angle);
f = (int) b;
if (b - (int) b > 0.5)
f += 1;
turtle.forward(f);
}
b = b / gold;
f=(int)r; if(r-(int)r>0.5) f+=1; for(int k=0;k<4;k++) {
turtle.turn(90.0);
turtle.forward(f); } r=r/gold;
}
turtle.draw();
