정상적인 n과 상수 d에 의해 주어진 평면 위에 놓 이도록 삼각형을 회전시켜야합니다. 포인트를 이동하지 않고 회전하는 방법은 무엇입니까?
저는 두 개의 삼각형이 놓여있는 평면의 정상적인 n1을가집니다. 이제 오른쪽 빨간 삼각형을 회전시켜야 오렌지색이됩니다. 삼각형과 법선의 점은 3 차원 벡터로 저장됩니다. 는 지금까지 내가했던 다음
- N1과 N2 사이의 정규화 된 회전 사원 수 (rotQuat)를 가져옵니다.
- 삼각형의 모든 점에 쿼터니언을 곱하십시오. 따라서 점을 쿼터니언 (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