2011-01-09 4 views
1

alt text Привет всем.Вычислите поворот между двумя Vector2s вокруг стержня

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

Что у меня есть поворотное Vector2, «Предыдущий» Vector2 и «Current» Vector2.

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

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

Очень большое спасибо всем, кто может помочь.

Предпосылки к задаче

У меня есть игра, в которой объект вращается вокруг внешней оси поворота. Используя две точки (одна в центре, одна в основе объекта), я хочу развернуть вращение, которое нужно применить к спрайту объектов вокруг его центра, чтобы соответствовать более крупному вращению, которое было применено ,

+0

Не совсем уверен, как мастер поворота приходит в это. Вам нужен угол между obj.cur.base -> master -> obj.prev.base? Или разность углов между obj.cur.pivot-> obj.cur.base и obj.prev.pivot -> obj.prev.base? В любом случае, кросс-продукт - это способ пойти, и похоже, что с этой информацией вы должны быть в состоянии разобраться в деталях. –

+0

Да, я просто играю с этим сейчас, пристрастия. Думаю, я усложнил ситуацию, пытаясь сделать ее более ясной. Главный стержень - это просто причина, по которой объект перемещается и поворачивается. т. е. объект вращается вокруг главной оси, поэтому теперь мне нужно увидеть, насколько объект вращается вокруг его центра из-за этого вращения. Я думаю, что мне достаточно, чтобы работать сейчас, хотя и с удачей. Приветствует обоих. – Nick

ответ

2

Возьмите cross product различий между векторами и шарниром:

Vector2 a = Pivot - Previous, b = Current - pivot; 
double angle = a.X * b.Y - a.Y * b.X; 
+2

+1, но вы должны помнить об «единице» векторов источника или делить полученный «угол» на «length (a) * length (b)». –

Смежные вопросы