Рассчитать угол поворота шарика на основе положения маркера

Я использую камеру для отслеживания одного черного маркера на синем шаре, как показано на рисунке ниже.

Синий шар с черным маркером

Я могу надежно определять положение маркера на верхней части изображения шара, но мне нужно знать, как рассчитать углы поворота шара на основе расположения маркера.

Когда маркер находится посередине, как показано, оба угла должны быть 0 градусов. Когда маркер виден только наполовину у левого края, как показано, горизонтальный угол должен составлять -90 градусов. Я понимаю, что вычисление углов по 2D-изображению является нелинейным, у края аналогичное движение в пикселях означает большее изменение во вращении, чем в середине, но я просто не могу придумать формулу.

1 ответ

Решение

Поворот вокруг вертикальной оси:

Phi  = ArcSin((Marker.X - Center.X) / Radius)

В общем, если вы берете начальную точку с 2D-координатами (x0, y0) на передней поверхности шарикового манипулятора с радиусом 1 и перетаскиваете ее в конечную точку (x1,y1), то вы поворачиваете вектор направления.

d0 = (x0, y0, Sqrt(1 - x0^2 - y0^2))
to
d1 = (x1, y1, Sqrt(1 - x1^2 - y1^2))

Что делать с этими векторами? Я зависит от того, какой подход вы собираетесь использовать для ротации

Другие вопросы по тегам