2015-11-17 10 views
2

Как создать систему координат с учетом только вектора? (левые, правые, местные или разные пространства)Как вычислить систему координат из одного вектора?

enter image description here

Я ищу вычислить алгоритм локальной системы coordiante дал только один вектор:

Причина:

1) Возможно, Z - нормальная поверхность, тогда вектор X и Y будет касательным и битагентным вектором

2) Еще одна причина заключается в трассировке лучей : выборка источника света. Для точки пересечения постройте локальную систему координат из этой точки, затем проследите лучи до светлой формы.

Vector3 Z = {0.0f, 0.0f, 1.0f}; // given 
// fill x and y 
CreateXHandedCoordinateSystem(Vector3* X, Vector3* Y, const Vector3& Z) { 
    // implementation goes here.. 
    // evaluate algorithm 
    // calculate X 
    // Y = cross(X, Z) or something .. 
} 
+3

Я задушевно понятия не имею, что вы хотите знать ... –

+0

@NathanOliver Я люблю как «чем» и «тогда» являются подходящими словами в вашем предложении :) – YSC

+2

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что, похоже, не существует конкретного вопроса программирования. – NathanOliver

ответ

2

Предположим, что наименьший компонент (по абсолютной величине) данного вектора равен Zz. Затем определите X как (Zy, -Zx, 0) и Y = (-Zx.Zz, -Zy.Zz, Zx²+Zy²).

Если самый маленький компонент не Zz, приспособите формулы соответствующим образом.

Обратите внимание, что эти векторы ненормированы, и я не смотрел на ручность.

0

Просто используйте концепцию вращения координат.

Первоначально, у вас есть один вектор (допустим в направлении х)

Теперь поверните этот вектор на 90 градусов, и вы получите вторую ось (ось при вращении на 90 градусов в плоскости XY)

Аналогично получить третью ось, вращаясь в соответствующей плоскости.

+0

Благодарю вас, Бибек. Я добавил некоторую информацию, чтобы очистить свой вопрос. Как вращать вектор на 90 градусов. (С точечным продуктом)? если я знаю вектор z, как рассчитать y или x вектор с некоторой математикой и кодом. если я найду y или z, кросс-продукты дают мне другой вектор. Я знаю, что перекрестное произведение двух векторов создает перпендикулярный вектор. , – ADesignersEncyclopedia

+0

Точечный продукт не нужен, вы просто вращаете точку и пересчитываете вектор – Bibek

1

Вы можете использовать трюк с двойным крестом.

  1. Возьмите свой вектор (назовем его локальным X) возьмите произвольный вектор (обычно вверх по вектору) и вычислите кросс-продукт. Это будет ваш местный Z.
  2. Возьмите местный X и Z локального и вычислить декартово произведение это будет ваш местный Y