我需要旋转一个三角形,使其位于由法线n和常数d给出的平面上。
我有两个三角形所在平面的正常n1。现在我需要旋转右边的红色三角形,这样才能产生橙色三角形。 三角形和法线的点存储为三维矢量。 到现在为止,我做了以下事情:
这就是我如何得到两个向量之间的旋转:
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;
}
问题是旋转后三角形的方向是正确的,但三角形也会移动它的位置。我需要一个旋转三角形的旋转,使它仍然连接到左红色三角形的两个点(就像橙色三角形一样)。 这怎么可能?
答案 0 :(得分:1)
您的问题是旋转矩阵/四元数围绕穿过原点的轴旋转点。要围绕与原点不同的点旋转,您需要将三角形点转换为原点(只需从三角形点中减去旋转点值),然后乘以四元数然后平移回来。
因此算法变为: