Python中的3D旋转数学

时间:2017-05-15 04:24:17

标签: python 3d coordinates trigonometry

我正在编写代码,使机器以给定矢量的角度定向切削刀具。我需要围绕Y轴旋转3D矢量坐标,我已经找到了方程式,但是当我使用它时代码就会中断。让我告诉你。

class Vector:
    def __init__(self, i, j, k):
    self.i = i
    self.j = j
    self.k = k

v0 = Vector(0.7844645405527362, 0.19611613513818404, 0.5883484054145521)

def findB():
    if v0.i != 0:
        angle = atan(v0.i/v0.k)
    else:
        angle = 0
    print(angle, degrees(angle))  --> 0.92729... 53.13010...

    v1 = Vector(v0.i, v0.j, v0.k)
# this formula rotates the vector about the j axis (comparable to y axis rotation)
    v1.i = v0.i * cos(angle) - v0.k * sin(angle)
    v1.k = v0.k * cos(angle) + v0.i * sin(angle)
    return angle, v1

machine.b, v1 = findB()

print(v1.i, v1.j, v1.k) --> 1.1102230246251565e-16 0.19611613513818404 0.9805806756909203

我在计算器上测试了这个公式,它正确地旋转了坐标,我甚至将值硬编码为:

v1.i = 0.784 * cos(0.927) - 0.588 * sin(0.927)
v1.k = 0.588 * cos(0.927) + 0.784 * sin(0.927)

对值进行硬编码会产生正确的结果,但只要我使用'angle',v0.i和v0.k作为变量就会得到v1.i不正确。 v1.i应为零(或舍入时几乎为零)。我在计算器上测试了相同的公式,它运行正常。有谁知道发生了什么事?

0 个答案:

没有答案