Я хочу переместить один объект (точку) по круговой траектории. Как мне изменить координаты X и Y, чтобы добиться этого?
Я хочу переместить один объект (точку) по круговой траектории. Как мне изменить координаты X и Y, чтобы добиться этого?
Ответы:
Вы можете сделать это, используя простую математику:
X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;
(originX, originY) - центр вашего круга. радиус это его радиус. Вот и все.
Это работает, потому что синус и косинус математически связаны с единичным кругом .
Изображение предоставлено: LucasVB (собственная работа) [Public domain], через Wikimedia Commons . (Уменьшено до 70%.)
Вы можете использовать параметрическое уравнение, как отмечено 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
Есть еще одна хитрость, где вы используете формулы sin (x + a) и cos (x + a), и это позволяет вам вычислять sin (a) и cos (a) - это угол, под которым вы хотите двигаться с вашей текущей позиции - только один раз и делайте просто умножение и сложение на каждом шаге.
sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.
Конечно, это предполагает постоянную угловую скорость.
Остерегайтесь ограниченной арифметической точности, хотя. Я наблюдал в прошлом «круговое» движение, реализованное таким образом, что рисовало бы спираль в результате случайного округления, повторяющегося со временем. Может потребоваться сброс положения на (x0, y0) после каждого оборота.