Вычисление двух векторов, перпендикулярных третьему вектору в 3D

Каков лучший (самый быстрый)способ вычисления двух векторов, которые перпендикулярны третьему вектору (X), а также перпендикулярны друг другу?

Вот как я вычисляю эти векторы прямо сейчас:

// HELPER - unit vector that is NOT parallel to X
x_axis = normalize(X);
y_axis = crossProduct(x_axis, HELPER);
z_axis = crossProduct(x_axis, y_axis);

Я знаю, что существует бесконечное множество решений, и мне все равно, какое из них будет моим решением.

Что стоит за этим вопросом: мне нужно построить матрицу преобразования, где я знаю, в каком направлении должна указывать ось X (первый столбец в матрице). Мне нужно рассчитать оси Y и Z (второй и третий столбцы). Как известно, все оси должны быть перпендикулярны друг другу.

5
задан sidon 22 May 2012 в 12:31
поделиться