在我的情况下,我有一个起始坐标x,y,z,四元数中的方向,我知道移动的距离。
基本上我想在应用变换和向前运动后知道x',y',z'。所以我试图使用四元数在3D中移动一个点。我想这应该只是一个简单的计算,但由于某种原因,我无法轻易找到解决方案。
在之前我将四元数转换为欧拉角并用它们来计算x',y',z'。不幸的是,由于万向节锁,这个解决方案不适合我了。
我在python中找到了一些例子,例如C#中的另一个例子,但我仍然没有得到它们的公式,因为他们正在讨论旋转而不是运动它自己,C#示例只是改变了立方体的中间点,然后随着旋转重绘它。
答案 0 :(得分:1)
为什么重新发明轮子?这种操作最好通过矩阵来处理 - 而C#甚至支持它。
// PresentationCore.dll
using System.Windows.Media.Media3D;
Matrix3D matrix = Matrix3D.Identity;
matrix.Translate(new Vector3D(x, y, z));
matrix.Rotate(quaterion);
var newPoint = matrix.Transform(point);