【发布时间】:2014-09-14 09:12:54
【问题描述】:
我需要旋转一个三角形,使其位于由法线 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;
}
问题是三角形在旋转后具有正确的方向,但三角形也会移动它的位置。我需要一个旋转三角形的旋转,以便它仍然连接到左侧红色三角形的两个点(如橙色那个)。 这怎么可能?
【问题讨论】:
-
之后只进行简单的翻译?这基本上是任何运动的组成部分:旋转+平移。
标签: java c++ opengl math directx