2013-03-25 3 views
0

Im работает над проектом прямо сейчас, и мне нужно сделать функцию, которая находит векторное направление для пули. Мой текущий код отключен, и я не могу найти причину.C++ Как найти вектор между двумя точками в окне?

float AngleX = pMouse->X() - This->DirectionX(); 
float AngleY = pMouse->Y() - This->DirectionY(); 
+2

Я не вижу, как вычитание двух координат Х даст вам угол. Что такое 'DirectionX'? –

+2

'Это'? Капитализированное? – raina77ow

+0

что такое 'DirectionX()' и 'DirectionY()'? Являются ли они компонентами (возможно, нормированного) вектора скорости? Если это так, помните, что вам нужна текущая позиция, а не направление движения. – jerry

ответ

6

Лучшая функция для нахождения углов от (х, у) смещения является atan2(dy, dx), где dy и dx являются дельта компоненты в каждом направлении.

Обратите внимание, что результат будет в радианах, а на некоторых графических системах ось y опускается вниз, а не вверх!

Особенно приятная особенность atan2 в том, что он всегда будет давать вам результат в полном диапазоне -π .. π которые вы не можете получить с помощью одного acos или asin операции. Результирующим углом будет угол данной линии относительно положительной оси X в направлении против часовой стрелки.

+1

Также обратите внимание, что только для справки линия сама по себе не имеет угла. Вам нужно, по крайней мере, два сегмента линии, которые касаются. «Угол», который вы получаете, - это угол между линией, соединяющей две точки, и другой воображаемой линией, как правило, параллельной оси X. – cHao

+0

@cHao хорошее разъяснение! – Alnitak

+0

Хороший комментарий, но похоже, что OP ищет вектор, а не угол. Конечно, преобразование не сложно, но вы уже неявно находите вектор. Проблема заключается в том, что ОП не может правильно вычислить ее. – jerry

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