使用四元数旋转迭代通过3d空间

时间:2015-06-23 13:20:26

标签: python loops 3d rotation quaternions

我有一组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次单独旋转计算更容易

1 个答案:

答案 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