Как использовать правило правой руки для glm::cross?

Когда я делаю cross(vec3(0,0,1),vec3(1,0,0)), я получаю vec3(0,1,0).

Может ли кто-нибудь объяснить мне, почему я не получаю vec3 (0, -1,0)? Если вы поместите указательный палец вперед, а средний палец укажет вправо, большой палец укажет вниз. Так что я делаю неправильно?


person Tai    schedule 30.05.2016    source источник
comment
Ничего — в правосторонней системе, где Z идет вперед, а X идет вправо, затем Y идет вниз. Таким образом, результатом является положительная величина в направлении Y.   -  person peppe    schedule 30.05.2016
comment
Если вы поместите указательный палец вперед, а средний палец укажет вправо Что здесь означает «вперед»? Это значит подальше от тебя? Потому что вперед обычно означает к вам. Я считаю, что самый простой способ выяснить, где находится +Z, — это вспомнить X cross Y = Z. Итак, в правосторонней системе координат поместите указательный и средний пальцы вдоль X и Y, и вот где Z. Если X находится справа, а Y вверху, то Z находится по направлению к вам в правосторонней системе координат.   -  person Nicol Bolas    schedule 30.05.2016
comment
Под словом «вперед» я имел в виду от вас, как если бы вы шли вперед. Мой код выполнен так: вперед — положительное значение Z, а вверх — положительное значение Y. Значит, в академических кругах Z — это обратное? Это объяснило бы мое замешательство.   -  person Tai    schedule 30.05.2016
comment
Чтобы уточнить, когда я сказал, что получил vec3(0,1,0), я имел в виду вывод программы. Используя правило правой руки, я получаю vec3(0,-1,0).   -  person Tai    schedule 30.05.2016


Ответы (1)


Вы получили правильный ответ. Если i, j, k единичные векторы в направлениях x, y, z, то:

i X j = k
j X k = i
k X i = j

Ваш пример является третьим, поэтому очевидно, что вы должны получить единичный вектор в положительном направлении y.

Это пример символа перестановки — подходит, поскольку векторы являются тензорами первого порядка.

person duffymo    schedule 30.05.2016