我有一组3维坐标。我编写了可以使用四元数乘法旋转3d矢量的函数。要做到这一点,我需要一个轴来旋转点。轴需要是单位向量,我有一个函数,它将标准化给定的向量。我尝试了一些简单的四元数(围绕x,y和z轴的旋转)并且它可以工作。
我将3d对象表示为坐标列表。我想以各种方式旋转对象。例如,如果我以1度的增量进行,我想要通过每1度增量旋转对象,它将涉及(360)(360)(360)不同的方向(至少我认为是这样)。或者如果我以10度的增量进行相同的操作,(36)(36)(36)。这一切都很好,但我如何设置一个轴旋转?
E.g。如果我写
for x in range (0, 360, 10):
for y in range (0, 360, 10):
for z in range (0, 360, 10):
我不确定接下来要写什么来创建轴向量。我认为直接计算轴向量然后将其应用于坐标列表比在每个点进行3次单独旋转计算更容易
答案 0 :(得分:1)
按multiplying quaternions,您可以组合多个四元数的旋转。假设你已经覆盖*运算符以允许四元数乘法,并且可以从角度和轴构造四元数,这里是如何实现嵌套循环:
for x in range (0, 360, 10):
rotation_x = Quaternion(Vector3(1, 0, 0), x)
for y in range (0, 360, 10):
rotation_y = Quaternion(Vector3(0, 1, 0), y)
for z in range (0, 360, 10):
rotation_z = Quaternion(Vector3(0, 0, 1), z)
combined_rotation = rotation_x * rotation_y * rotation_z
# do whatever you need with the rotation