Как я могу переместить объект по траектории «бесконечность» или «цифра 8»?


28

Когда я хочу переместить объект вокруг точки, я делаю:

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

Как заставить точку двигаться на восьмой или бесконечной траектории?

Ответы:


24

2
Ответы должны быть самодостаточными, внешние ссылки могут когда-нибудь умереть и сделают этот ответ бесполезным. Вы должны процитировать важные биты из ссылок, которые вы предоставили.
— Брайан Х.

61

Как отмечает Мартон, есть несколько кривых «восьмерка», которые могут соответствовать вашим потребностям. Возможно, самым простым является лемнискат Героно , который имеет параметризацию:

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;

Это выглядит так:

Анимация Лемниската Бернулли

(Анимации, сделанные с помощью Maple 13, сжатые с помощью GIFsicle.)


Спасибо всем за вашу поддержку, которая принесла мне мой первый золотой значок здесь на gamedev! :-)
— Илмари Каронен

1
+1 за размещение не только ссылок, но и формул и графики (с источниками).
— rootlocus

2
Как есть, это должен быть принятый ответ.
— Брайан Х.

-1

Я случайно нашел другой, используя эту формулу:

x2=y2+0.1x2.8

По графику Вольфрама Альфа :

половина символа бесконечности


В отличие от других ответов, этот в настоящее время не представлен в параметрической форме, что позволяет нам легко продвигать позицию вперед с течением времени t. Я бы рекомендовал включить описание того, как вы будете использовать эту формулу для позиционирования движущегося объекта во времени.
— DMGregory

-4

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

половина символа бесконечности

Произведение расстояний от любой точки на этой кривой до (-1, 0) и (1,0) является постоянным и равно 1.


4
Этот ответ предоставляет формулу, моделирующую такую ​​кривую, но не метод «перемещения объекта» таким образом, чтобы он следовал этой кривой. Пожалуйста, подумайте над уточнением ответа, чтобы указать, как вы будете использовать эту математику для перемещения объекта в игре.
— DMGregory
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.