我在python中创建了一个用于向量和向量加法的类;但是,它似乎没有产生我预期的结果。
方向为pi(弧度)或180(度)的矢量,幅度为1加上一个矢量,方向为pi * 2(弧度)或0/360(度),幅度为1 (0,0)的向量,对吗?但是,我从代码中得到了奇怪的结果。
( - 1.5707963267948966,1.2246467991473532e-16)
这是我从上述矢量添加中得到的结果。
这是我的代码:
import math
class Vector:
def __init__(self, direction, magnitude, directionType="degrees"):
if directionType=="degrees":
direction = math.radians(direction)
self.direction = direction
self.magnitude = magnitude
def __add__(self, other):
x = (math.sin(self.direction) * self.magnitude) + (math.sin(other.direction) * other.magnitude)
y = (math.cos(self.direction) * self.magnitude) + (math.cos(other.direction) * other.magnitude)
magnitude = math.hypot(x, y)
direction = 0.5 * math.pi - math.atan2(y, x)
return (direction, magnitude)
v1 = Vector(math.pi, 1, directionType="radians")
v2 = Vector(math.pi*2, 1, directionType="radians")
print v1+v2
答案 0 :(得分:2)
1.22e-16是一个非常小的数字。如果您不喜欢看到它,请将您的数字四舍五入到合理的精度,它将为零。我不希望角度是可预测的,在这种情况下它似乎是pi / 2。舍入到10位小数的示例:
angle, magnitude= v1+v2
magnitude = round(magnitude, 10)
result = (angle, magnitude)
print(result)
答案 1 :(得分:-1)
它看起来工作正常。请参阅What Every Computer Scientist Should Know About Floating Point Arithmetic。
我以为在某处发布了它的摘要版本,但我找不到它。