Мне нужно повернуть треугольник так, чтобы он лежал на плоскости, заданной нормальным n и константой d. Как повернуть точки, не перемещая их?
У меня нормальный n1 плоскости, в которой находятся два треугольника. Теперь мне нужно повернуть правый красный треугольник, чтобы он стал оранжевым. Точки треугольников и нормалей сохраняются как 3-мерные векторы. До сих пор я сделал следующее:
- Получить нормированной вращения кватернион (rotQuat) между n1 и n2.
- Умножьте каждую точку треугольника на кватернион. Поэтому я конвертирую точку в кватернион (point.x, point.y, point.z, 0) и выполняю следующее: resultQuat = rotQuat * point * conjugate (rotQuat). Затем я применяю x, y и z результата к точке.
Это, как я получаю вращение между двумя векторами:
public static Quaternion getRotationBetweenTwoVector3f(Vector3f vec1, Vector3f vec2)
{
Vector3f cross = Vector3f.cross(vec1, vec2);
float w = (float) (java.lang.Math.sqrt(java.lang.Math.pow(vec1.getLength(), 2) * java.lang.Math.pow(vec2.getLength(), 2)) + Vector3f.dot(vec1, vec2));
Quaternion returnQuat = new Quaternion(cross.x, cross.y, cross.z, w);
returnQuat.normalize();
return returnQuat;
}
Проблема заключается в том, что треугольник имеет правильную ориентацию после поворота, но треугольник также перемещает его положение. Мне нужно вращение, которое поворачивает треугольник так, чтобы оно все еще было соединено с двумя точками левого красного треугольника (например, оранжевым). Как это возможно?
Просто выполните простой перевод впоследствии? Это в основном то, что любое движение состоит из: вращения + перевода. – Bernhard