Bagaimana saya bisa memindahkan objek dalam lintasan "tak terbatas" atau "angka 8"?

28

Ketika saya ingin memindahkan objek di sekitar titik saya lakukan:

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

Bagaimana cara membuat titik bergerak pada lintasan delapan atau tak terbatas?

Yevhen
sumber

Jawaban:

61

Seperti yang dicatat Marton, ada beberapa kurva "angka delapan" yang mungkin sesuai dengan kebutuhan Anda. Mungkin yang paling sederhana adalah lemniscate Gerono , yang memiliki parametrization:

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

dan terlihat seperti ini:

Animasi Lemniscate dari Gerono

Namun, lemniscate Bernoulli mungkin secara visual lebih menyenangkan; ia memiliki parametrization yang sangat mirip dengan lemniscate Gerono, kecuali bahwa kedua sumbu diskalakan oleh faktor 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;

Ini terlihat seperti ini:

Animasi Lemniscate of Bernoulli

(Animasi dibuat dengan Maple 13, dikompres dengan GIFsicle.)

Ilmari Karonen
sumber
Terima kasih, semuanya, atas dukungan Anda, yang telah memberi saya lencana emas pertama saya di sini di gamedev! :-)
Ilmari Karonen
1
+1 untuk tidak hanya memposting tautan, tetapi juga rumus dan grafik (dengan sumber).
rootlocus
2
Seperti, ini harus menjadi jawaban yang diterima.
Brian H.
-1

Saya secara acak menemukan yang lain menggunakan rumus ini:

x2=y2+0,1x2.8

Seperti yang diplot oleh Wolfram Alpha :

setengah dari simbol infinity

pengguna75095
sumber
Berbeda dengan jawaban lain, yang saat ini tidak disajikan dalam bentuk parametrik yang memungkinkan kita dengan mudah melangkah maju dari waktu ke waktu t. Saya akan merekomendasikan untuk menyertakan deskripsi tentang bagaimana Anda akan menggunakan rumus ini untuk memposisikan objek bergerak dari waktu ke waktu.
DMGregory
-4

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

setengah dari simbol infinity

Produk jarak dari titik mana pun pada kurva ke (-1, 0) dan ke (1,0) adalah konstan dan sama dengan 1.

pengguna111508
sumber
4
Jawaban ini memberikan rumus pemodelan kurva seperti itu, tetapi bukan metode untuk "memindahkan objek" sedemikian rupa sehingga mengikuti kurva itu. Harap pertimbangkan untuk menguraikan jawaban untuk menunjukkan bagaimana Anda akan menggunakan matematika ini untuk memindahkan objek dalam permainan.
DMGregory