这里的任何人都知道如何使用.net(4.6 及更高版本)System.Numerics.Quaternion 旋转vector3?
虽然我的数学很差,但我的理解只限于:四元数是 4d 的“结构”,可以在 3d 中产生平移、缩放和旋转。
所以我有一场比赛,不能得到任何轮换。做看起来很明显的事情:改变四元数的 W 分量。(角度)然后读取向量产生缩放?!?任何人都能够帮助或指出我正确的方向寻求帮助?
我当前的旋转(非四元数)代码(X 轴示例)
Private Sub Xaxis_rotation(ByVal angle As Double)
Dim Cangle As Double = Cos(angle)
Dim Sangle As Double = Sin(angle)
Parallel.For(1, vertcount, Sub(f As Int32)
Verts(f) -= modelcenter
Verts(f).Y = (Verts(f).Y * Cangle) + (Verts(f).Z * Sangle)
Verts(f).Z = (Verts(f).Z / Cangle) - (Verts(f).Y * Sangle)
Verts(f) += modelcenter
End Sub)
End Sub
[编辑]
Dim rotAxis As Vector3 = Vector3.UnitX
Dim rotangle As Single = 0.785398 '45 degrees as radians
Dim q As Quaternion = Quaternion.CreateFromAxisAngle(rotAxis, rotangle)
Dim aVector As Vector3 = *vector to be rotated*
'rotate
Dim resultQ As Quaternion = q * Quaternion.CreateFromAxisAngle(aVector, 0) / q
aVector.X = resultQ.X
aVector.Y = resultQ.Y
aVector.Z = resultQ.Z
q*Quaternion.CreateFromAxisAngle(aVector, 0) / q 是我最好的猜测,但它不会产生旋转。