这更像是一个有趣的实验而不是一个问题,我更好奇是什么原因造成的。
我正在生成 2D 点,存储为浮点数,以便在模式中绘制一组线条。生成新点时,我复制最后一个点,并根据航向 (x += cos(heading), y += sin(heading)) 将其移动到某个方向。航向也存储为浮点数。我以给定的速率(例如 90 度)更改航向,这意味着每个新点要么与最后一个点平行,要么与之成直角。
这是可行的,但经过多次(1000 次)迭代后,图案的外边缘开始变得稍厚,然后新绘制的点开始在稍微歪斜(但一致)的位置移动。然后整个图案开始旋转。
我很好奇的是不应该打破的东西如何打破。我最好的猜测是标题(一个不断减小的浮点数)在达到一定大小时会失去定义。
本质上,代码(用于生成下面的确切模式)看起来像这样
float distance = 25;
int theta = 90;
float heading = 0;
public static void main(String[] args) {
turnLeft();
func();
turnRight();
func();
turnRight();
turnRight();
func();
}
public void func() {
drawForward();
turnRight();
drawForward();
turnRight();
turnRight();
drawForward();
turnRight();
drawForward();
drawForward();
}
public void turnLeft() {
heading += degToRad(theta);
}
public void turnRight() {
heading -= degToRad(theta);
}
public float degToRad(float degrees) {
return (float) (degrees * (Math.PI / 180.0));
}
public void drawForward() {
FPoint newFp = new FPoint(array[array.length - 1]); //copy last point
movePoint(newFp, (float) (distance * Math.cos(heading)),
(float) (distance * Math.sin(heading)));
appendPoint(newFp); //add point to end of array
}
public void movePoint(FPoint fp, float x, float y) {
fp.x += x;
fp.y += y;
}
对此事的任何想法将不胜感激!