Переміщення предмета круговою доріжкою


26

Я хочу перемістити один об’єкт (крапку) круговою доріжкою. Як я повинен змінити координати X і Y для цього?

Відповіді:


54

Це можна зробити, використовуючи просту математику:

X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;

(originX, originY) - центр вашого кола. радіус - його радіус. Це воно.

Це працює, тому що синус і косинус математично пов'язані з одиничним колом .

відношення синуса і косинуса до одиничного кола
Кредит зображення: LucasVB (власна робота) [Публічне надбання], через Wikimedia Commons . (Зменшено до 70%.)


Що робити, якщо це овал? Тобто не встановлений радіус.
тест

2
@test: Якщо овал орієнтований на X або Y, ви можете помножити відповідне положення осі на додатковий коефіцієнт. Якщо вам потрібно більше деталей, вам слід задати окреме запитання.
Кромстер каже, що підтримую Моніку

@Anko: Я не думаю, що анімація пояснює це краще, але нехай це буде для тих, хто цього потребує. Перетворено на CW.
Кромстер каже, що підтримую Моніку

@Kromster, що робити досягнення того ж результату в 3d-просторі?
Томаш

14

Можна використовувати параметричне рівняння, позначене Кром. Щоб зрозуміти, чому ми використовували цю формулу, ви повинні зрозуміти, що таке рівняння. Це рівняння виводиться з параметричного рівняння кола .

Враховуючи, що коло намальовано центром на початку (O), як показано на схемі нижче Коло

Якщо візьмемо точку "р" на окружності кола, маючи радіус r.

Нехай кут, зроблений ОП (Походження до р), дорівнює θ. Нехай відстань p від осі x дорівнює y Нехай відстань p від осі y буде x

Використовуючи наведені вище припущення, ми отримуємо трикутник, як показано нижче: трикутник

Тепер ми знаємо, що cos θ = основа / гіпотенуза і sin θ = перпендикуляр / гіпотенуза

що дає нам cos θ = x / r та sin θ = y / r

:: x = r * cos θ і y = r * sin θ

Але якщо коло знаходиться не в початку, а скоріше в (a, b), тоді можна сказати, що центр кола зміщений

одиниці по осі x
одиниці b осі y
Отож для такого кола ми можемо відповідно змінити параметричне рівняння, додавши зсув по осі x і y, даючи нам такі рівняння:

x = a + (r * cos θ)
y = b + (r * sin θ)


Де a & b - координати x, y центру кола.

Отже, ми знайшли x і y координати точки на окружності кола з радіусом r


2
Дякую, дуже приємна і коротка відповідь на цю проблему, великі пальці вгору
Ali.Ghodrat

5

Є ще одна хитрість, де ви використовуєте формули sin (x + a) і cos (x + a), і це дозволяє вам обчислити sin (a) і cos (a) - істота, кут, під яким ви хочете рухатись з вашої поточної позиції - лише один раз і виконайте просто множення та доповнення на кожному кроці.

sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.

Звичайно, це передбачає постійну кутову швидкість.

Однак остерігайтеся обмеженої арифметичної точності. Раніше я помічав, що "круговий" рух реалізовувався таким чином, що малював би спіраль у результаті періодичного округлення вниз, повторюваного з часом. Можливо, потрібно буде скинути позицію до (x0, y0) після кожного перевороту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.