Python中除法的奇怪行为

时间:2014-05-08 10:49:32

标签: python math division algebra

我完全难以处理一些非常简单的事情。以下几行是一个更大的程序的一部分。东西和东西是网格上的两个对象,我需要找到它们之间相对于y轴的角度。 math.atan采用浮点数,我为什么需要输入对象之间的距离。

m_angle = math.degrees(math.atan(float(thing.position()[1]-stuff.position()[1]) / float(thing.position()[0]-stuff.position()[0])))

m_angle = math.degrees(math.atan(float(thing.position()[1]-stuff.position()[1]) / thing.position()[0]-stuff.position()[0]))

.position调用所有返回整数。

对于每一行,我在运行程序时会得到不同的结果。前两个应该返回完全相同的结果,一个浮点数。

我不明白的是,根据我是否运行第1行或第2行,我可能会得到不同的结果:/

这是模拟的一部分,

2 个答案:

答案 0 :(得分:4)

难以以您正在编辑的速度回答,但是:

m_angle = math.degrees(math.atan(float(thing.position()[1]-stuff.position()[1]) / float(thing.position()[0]-stuff.position()[0])))

atan中的位相当于something/(a-b)

m_angle = math.degrees(math.atan(float(thing.position()[1]-stuff.position()[1]) / thing.position()[0]-stuff.position()[0]))

atan中的位相当于(something/a)-b

答案 1 :(得分:0)

为避免混淆,请使用

m_angle = math.atan2(thing.position()[1]-stuff.position()[1], thing.position()[0]-stuff.position()[0]);
m_angle = math.degrees(m_angle);

不包括分区,因此不需要整数到浮点转换。

如果角度在II中,这将给出与atan函数不同的正确角度。或者III。象限。 atan函数给出结果mod 180°,atan2函数mod 360°。根据应用程序的不同,其中一个可能是预期的结果。