「無限」または「図8」の軌道でオブジェクトを移動するにはどうすればよいですか?


28

オブジェクトをポイントの周りに移動したいとき:

    point.x *= cosf(timer.timeElapsed);
    point.y *= sinf(timer.timeElapsed);

8点または無限大のサイン軌道でポイントを移動させる方法は?

回答:



61

Martonが指摘しているように、ニーズに合った「8の図」曲線がいくつかあります。おそらく最も単純なのは、パラメーター化されたGeronoレムニスケートです

x = cos(t);
y = sin(2*t) / 2;

次のようになります。

ジェロノアニメーションのレムニスケート

ただし、ベルヌーイレムニスケートは視覚的にもっと楽しいかもしれません。これは、両方の軸が次の係数でスケーリングされることを除いて、ジェロノのレムニスケートに非常によく似たパラメーター化を持っています1/(sin(t)^2 + 1) = 2/(3 - cos(2*t))

scale = 2 / (3 - cos(2*t));
x = scale * cos(t);
y = scale * sin(2*t) / 2;

次のようになります。

ベルヌーイのレムニスケートアニメーション

(GIFsicleで圧縮されたMaple 13で作成されたアニメーション。)


gamedevで私の最初のゴールドバッジを獲得してくれた皆さん、ご支援ありがとうございます!:-)
イルマリカロネン

1
リンクの投稿だけでなく、数式とグラフィックス(ソースを含む)も+1します。
-rootlocus

2
そのまま、これは受け入れられた答えであるはずです。
ブライアンH.17年

-1

この式を使用してランダムに別のものを見つけました:

x2=y2+0.1x2.8

Wolfram Alphaがプロットしたとおり:

無限大記号の半分


他の答えとは異なり、これは現在、時間の経過とともに位置を簡単に進めることができるパラメトリック形式で提示されていませんt。この式を使用して、時間の経過とともに移動するオブジェクトを配置する方法の説明を含めることをお勧めします。
DMGregory

-4

((x+1)2+y2)((x1)2+y2)=1

無限大記号の半分

その曲線上の任意の点から(-1、0)および(1,0)までの距離の積は一定であり、1に等しくなります。


4
この答えは、そのような曲線をモデル化する式を提供しますが、その曲線に従うような方法で「オブジェクトを移動する」方法を提供しません。この数学を使用してゲーム内のオブジェクトを移動する方法を示すために、答えを詳しく検討することを検討してください。
DMGregory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.