これは問題というよりは楽しい実験です。何が原因なのか知りたいです。
パターンで線のコレクションを描画するために、フロートとして格納された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;
}
この件についてのご意見をいただければ幸いです。