2009-10-19 1 views
3

Я новичок в работе с 3D, и даже простые вещи заставляют мою голову вращаться. Извините за вопрос о новичке.Вычислить 3D-вектор перпендикулярно плоскости, порожденной двумя векторами

Допустим, у меня есть 2 векторов:

a(2,5,1) 
b(1,-1,3) 

Эти векторы "генерировать" плоскость. Как я могу получить третий вектор перпендикулярно как a и b?

Я могу сделать это в 2D с помощью вектора c (A, B) и превратить его в c '(- B, A).

Спасибо за помощь.

ответ

14

Используйте cross product.

То есть, вектор перпендикулярно a и b дается по (a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x).

7

Берет перекрестное умножение этих двух векторов, чтобы получить третий перпендикулярный вектор к плоскости, которую они порождают:

P = A * B 

Который является:

<xp, yp, zp> = |i j k | 
       |xa ya za| // The determinant 
       |xb yb zb| 

Все, что вам нужно сделать, это решить этот детерминант или просто посмотреть его в Wikipedia :)

+0

Мне нравится этот ответ лучше, потому что он объясняет, откуда приходит ответ. Это не просто случайная формула для запоминания. –

+0

Спасибо, я тоже согласился бы:) – nonammeN

2

Для чего это стоит, вот кросс-функция продукта от Quake 3, где vec3_t определяется как массив из трех поплавки для x, y и z:

void CrossProduct(const vec3_t v1, const vec3_t v2, vec3_t cross) { 
    cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; 
    cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; 
    cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; 
}