ФлеймФорумПрограммирование

Определение по какую сторону от вектора лежит точка.

#0
21:45, 17 фев 2012

У меня есть позиция объекта в пространстве, вектор направления этого объекта и позиция другого объекта, мне нужно определить в какую сторону надо поворачиваться чтобы как можно быстрее 1-ый объект увидел 2-ого. Всё в 3D пространстве но я буду отдельно считать для каждой плоскости(xz, xy, zy).

#1
21:50, 17 фев 2012

угол А = atan2(dy, dx) вектора
угол Б = затем второго вектора построенного из начала первого в твою точку
тогда задача сводится к нахождению в какую сторону по шкале от 0 до 360 градусов крутить стрелку, чтоб из угла А стал угол Б, с учётом перехода нуля градусов конечно. Если углы лежат по разные стороны от нуля градусов, то можно прибавить или отнять 360 от обоих углов.

#2
21:54, 17 фев 2012

Можно векторное произведение. По модулю полученного вектора получаем синус угла поворота, а по знаку третьей координаты (если у тех двух векторов эта координата = 0 в этом базисе) - направление поворота.

#3
22:01, 17 фев 2012

kvakvs

что-то я не совсем понял, так?:

D3DXVECTOR3 Dir(0, 0, 1);
D3DXVECTOR3 A(0, 0, 0);
D3DXVECTOR3 B(10, 0, 0);
D3DXVECTOR3 B2;
float AA, AB;
B2 = B - A;
D3DXVec3Normalize(&B2, &B2);
AA = atan2(Dir.x, Dir.z);
AB = atan2(B2.x, B2.z);

Правильно? а если правильно то дальше что? мне ведь нужен только 1 угол а их получилось 2.

#4
22:25, 17 фев 2012
localX = B.x - A.x;
localY = B.y - A.y;
ang = atan2(localY, localX);
diff = A.angle - ang;
if (diff >= 0)
{
  if (diff > PI)
    return CW;
  else
    return CCW;
}
else
{
  if (diff > -PI)
    return CW;
  else
    return CCW;
}

Не уверен, но, по-моему, так.

#5
22:39, 17 фев 2012

Antilegent
а что такое CW и CCW? Это стороны куда надо поворачиваться?

P.S. Заметил ошибку в названии темы, исправил.

#6
23:05, 17 фев 2012

Скалярное произведение вектора на точку с вектором право/или лево.

#7
23:06, 17 фев 2012

kroonk
> в какую сторону надо поворачиваться
если на плоскости, то http://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE… D%D0%B8%D0%B5

для направления взгляда A и направления к объекту B единичной длины, ось Y вверх ось X вправо

sinPhi = (A.x*B.y - A.y*B.x)

если sinPhi < 0, то ближайший поворот от A к B по часовой стрелке (ClockWise)
если sinPhi > 0, то ближайший поворот от A к B против часовой стрелки (CounterClockWise)
если sinPhi = 0, то они либо сонаправлены либо противонаправлены

для 3-ех измерений похожая фигня:
http://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80… D%D0%B8%D0%B5

#8
23:15, 17 фев 2012

Скажу проще. Скалярное произведение с единичным вектором дает расстояние до плоскости, задаваемой этим вектором. Причем расстояние со знаком.
В своё время реализовывал игровой физический движок и графический, так вот, кроме шейдеров тригонометрические функции нигде не использовались, всё на векторной математике.

#9
23:26, 17 фев 2012

kroonk

> а что такое CW и CCW? Это стороны куда надо поворачиваться?

Clockwise и Counter Clockwise - по и против часовой стрелки.

#10
0:20, 18 фев 2012

aloha_hawaii
> В своё время реализовывал игровой физический движок и графический, так вот, кроме шейдеров тригонометрические функции нигде не использовались, всё на векторной математике.
интегрировал вращение, должно быть, тоже векторной математикой? или в шейдере?

#11
0:43, 18 фев 2012

Вращение кватернионами. Согласен, лажанул, еще в математике кватернионов была тригонометрия.

#12
7:35, 18 фев 2012

CD
Спасибо, работает.

ФлеймФорумПрограммирование

Тема в архиве.