Перемещение объекта по круговой траектории


26

Я хочу переместить один объект (точку) по круговой траектории. Как мне изменить координаты X и Y, чтобы добиться этого?

Ответы:


54

Вы можете сделать это, используя простую математику:

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

(originX, originY) - центр вашего круга. радиус это его радиус. Вот и все.

Это работает, потому что синус и косинус математически связаны с единичным кругом .

Отношение синуса и косинуса к единичному кругу
Изображение предоставлено: LucasVB (собственная работа) [Public domain], через Wikimedia Commons . (Уменьшено до 70%.)


Что если это овал? Т.е. не установлен радиус.
тест

2
@test: Если овал ориентирован на X или Y, вы можете умножить соответствующую позицию оси на дополнительный коэффициент. Если вам нужно больше деталей, вы должны задать отдельный вопрос.
Кромстер говорит, что поддерживает Монику

@Anko: Я не думаю, что анимация объясняет это лучше, но пусть это будет, для тех, кто в этом нуждается. Преобразован в CW.
Кромстер говорит, что поддерживает Монику

@ Кромстер, как насчет достижения того же результата в трехмерном пространстве?
Томас

14

Вы можете использовать параметрическое уравнение, как отмечено Krom. Чтобы понять, почему мы использовали эту формулу, вы должны понять, что такое уравнение. Это уравнение получено из параметрического уравнения круга .

Учитывая, что круг нарисован с центром в начале координат (O), как показано на схеме ниже Круг

Если взять точку «р» на окружности окружности, имеющую радиус r.

Пусть угол, заданный OP (Origin to p), равен θ. Пусть расстояние p от оси x равно y Пусть расстояние p от оси y равно x

Используя вышеприведенные предположения, мы получаем треугольник, как показано ниже: треугольник

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

что дает нам cosθ = x / r и sinθ = y / r

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

Но если круг не в начале координат, а в точке (a, b), то можно сказать, что центр круга смещен

a единицы по оси 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.