【软件构造】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();
经验分享 程序员 微信小程序 职场和发展