我正在编写代码,使机器以给定矢量的角度定向切削刀具。我需要围绕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应为零(或舍入时几乎为零)。我在计算器上测试了相同的公式,它运行正常。有谁知道发生了什么事?