如何旋转球体表面上的点 3 度旋转?

问题描述 投票:0回答:1

我在球体上有一个点需要旋转。我有 3 种不同的旋转角度(滚动、俯仰、偏航)。是否有任何公式可以用来计算应用每次旋转后该点最终的位置?为了简单起见,如果有帮助的话,球体可以以原点为中心。

我尝试过寻找不同的旋转方式,但没有什么完全符合我正在寻找的。如果我只需要旋转球体,我可以这样做,但我需要根据球体的旋转知道点的位置。

以 Unity 为例,这不属于单独项目中的 unity,因此不可能使用他们的库:

如果原点在(1,0,0)

然后球体旋转 [45, 30, 15]: 该点的新 (x, y, z) 是什么?

geometry rotation point spherical-coordinate
1个回答
0
投票

如果给定的旋转为四元数 q,那么您可以像这样旋转点 (Vector3) p:

Vector3 pRotated = q * p;

如果您以欧拉角为单位进行旋转,那么您始终可以将其转换为这样的四元数(其中 x、y 和 z 是围绕这些轴的旋转度数):

Quaternion q = Quaternion.Euler(x,y,z);

请注意,Unity 的欧拉角被定义为首先使对象围绕 z 轴旋转,然后围绕 x 轴,最后围绕 y 轴 - 并且这些轴都在父变换的空间中(如果有的话)不是对象的局部轴,它会随着每次旋转而移动)。

所以我认为 z 轴是滚动,x 轴是俯仰,y 轴是偏航。您可能必须切换某些轴上的符号以匹配预期结果 - 例如,正 x旋转将使对象向下倾斜(假设对象的向前概念是其正 z 方向,向上是其正 y 方向)。

© www.soinside.com 2019 - 2024. All rights reserved.