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?

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.)


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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.