Как сравнить относительное вращение между объектами?

У меня есть два объекта в трехмерном пространстве (используя OpenGL для рендеринга всего) одного типа класса. Эти объекты хранят смещения xyz и матрицу вращения, представляющую вашу стандартную матрицу вращения 4×4.

Урезанный пример:

class object {
float rotMatrix[16];
float xyzTrans[3];
//a displaylist for drawing the object
}

Я использую GLUI для элементов управления пользовательского интерфейса, что делает хранение преобразований в формате довольно простым.

Эта проблема:
Мне нужно определить «правильную» ориентацию для одного объекта по отношению к другому. Например, если первый объект направлен прямо вниз по оси z, а второй — тот же, но также повернут примерно на 45 градусов вокруг оси x, это будет считаться «правильным», и мои функции будут делать то, что им нужно. , Конечно, это может варьироваться, может быть, это один и тот же z, но повернутый на x и y, или, может быть, даже немного повернутый вокруг каждой оси. Определение «правильных» поворотов будет сохранено в объекте для сравнения.

В идеале я надеюсь сделать что-то вроде:

bool checkRotation(object* first, object* second) {
//do some comparison stuff

if (eachCheck < someTolerance)
return true;
return false;
}

Можно ли это сделать путем сравнения двух вращательных матриц? Нужно ли конвертировать в кватернионы и использовать их?

Этот вопрос это самое близкое, что я нашел к тому, что я спрашиваю, но оно достаточно отличается, чтобы сбить с толку.

0

Решение

Не полный ответ, но слишком длинный для комментария:

Если у вас есть две честные матрицы вращения, то они должны быть обратимыми и определителями 1. Назовите матрицы A а также B, Если вы хотите проверить, что изображения A(X) а также B(X) из тот же объект X под двумя поворотами «близко» в том смысле, что вы можете перейти от A(X) в B(X) вращением вокруг указанной оси, это эквивалентно проверке, получена ли матрица путем A раз обратное B «почти» вращение вокруг этой оси. Так что, возможно, вы хотите на это посмотреть.

Я не слишком знаком с математическими функциями OpenGL, поэтому не могу предоставить код, извините.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]