ฉันจะย้ายวัตถุในเส้นทาง“ ไม่มีที่สิ้นสุด” หรือ“ รูปที่ 8” ได้อย่างไร


28

เมื่อฉันต้องการย้ายวัตถุไปรอบ ๆ จุดฉันทำ:

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

วิธีทำให้จุดเคลื่อนที่บนวิถีวิถีแปดหรืออนันต์

คำตอบ:


24

2
คำตอบควรอยู่ในตัวเองลิงก์ภายนอกอาจตายไปสักวันและจะทำให้คำตอบนี้ไร้ประโยชน์ คุณควรอ้างอิงบิตสำคัญจากลิงก์ที่คุณให้ไว้
Brian H.

61

ในฐานะที่เป็น Marton บันทึกว่ามี "รูปแปด" หลายโค้งที่อาจตอบสนองความต้องการของคุณ บางทีที่ง่ายที่สุดคือlemniscate ของ Geronoซึ่งมี parametrization:

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

และมีลักษณะเช่นนี้:

Lemniscate ของแอนิเมชั่น Gerono

อย่างไรก็ตามlemniscate ของ Bernoulliอาจจะดูดีกว่า มันมี parametrization คล้ายกับ lemniscate ของ Gerono ยกเว้นว่าทั้งสองแกนจะถูกปรับอัตราส่วนโดยปัจจัย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;

ดูเหมือนว่านี้:

Lemniscate of Bernoulli แอนิเมชัน

(ภาพเคลื่อนไหวที่ทำจาก Maple 13 บีบอัดด้วย GIFsicle)


ขอบคุณทุกคนสำหรับการสนับสนุนของคุณซึ่งทำให้ฉันได้รับเหรียญทองอันแรกของฉันที่ gamedev! :-)
Ilmari Karonen

1
+1 สำหรับการโพสต์ลิงค์เท่านั้น แต่ยังรวมถึงสูตรและกราฟิก (ที่มีแหล่งที่มา)
rootlocus

2
เช่นนี้ควรเป็นคำตอบที่ยอมรับได้
Brian H.

-1

ฉันพบอีกอันหนึ่งโดยใช้สูตรนี้:

x2=Y2+0.1x2.8

ตามที่วางแผนโดย Wolfram Alpha :

ครึ่งหนึ่งของสัญลักษณ์อินฟินิตี้


ซึ่งแตกต่างจากคำตอบอื่น ๆ tอันนี้ยังไม่ได้นำเสนอในรูปแบบตัวแปรที่ช่วยให้เราได้อย่างง่ายดายก้าวตำแหน่งไปข้างหน้าเมื่อเวลาผ่านไป ฉันขอแนะนำให้รวมคำอธิบายว่าคุณจะใช้สูตรนี้อย่างไรในการวางตำแหน่งวัตถุที่เคลื่อนไหวตลอดเวลา
DMGregory

-4

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

ครึ่งหนึ่งของสัญลักษณ์อินฟินิตี้

ผลคูณของระยะทางจากจุดใด ๆ บนโค้งนั้นถึง (-1, 0) และถึง (1,0) เป็นค่าคงที่และเท่ากับ 1


4
คำตอบนี้ให้สูตรการสร้างแบบจำลองเช่นโค้ง แต่ไม่ใช่วิธีการ "ย้ายวัตถุ" ในลักษณะที่เป็นไปตามโค้งนั้น โปรดพิจารณาอย่างละเอียดเกี่ยวกับคำตอบเพื่อระบุว่าคุณจะใช้คณิตศาสตร์นี้เพื่อย้ายวัตถุในเกมได้อย่างไร
DMGregory
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.