回复:“()应该返回钟表指针从 p1 移动到 p2 所需的度数。”
在您的代码中,在使用 p1 计算角度之前,您从 p2 中减去点 atan2 的坐标。本质上,您认为 p1 是时钟的中心,因此谈论“旋转从 p1 移动到 p2”没有任何意义。您需要指定三个点:旋转的中心、点 1 和点 2。如果坐标为 xc、yc、x1、y1、x2、y2留学之路,那么您需要执行以下操作:
代码语言:
复制
angle1 = atan2(y1-yc, x1-xc)
angle2 = atan2(y2-yc, x2-xc)
relative_angle = angle1 - angle2
# now convert to degrees and handle +/-360 issues.
使用您的新规范进行更新:“返回时钟必须转到从 0° 到连接 P1 和 P2 的线的度数”:
代码语言:
复制
angle = degrees(atan2(p2[1], p2[0]))
这将返回 -pi 到 +pi(-180 到 +180 度)范围内的顺时针角度(以像素坐标为单位)。在您的示例中,((100,100), (25,25))(“预期 225 度,但实际为 135 度”),atan2 将得出 -,这意味着逆时针方向 +。这是您想要的答案(模 360 度)顺时针方向,因为您没有指定时钟指针应该顺时针旋转还是逆时针旋转(您只是指定了起始位置相对于 3 点钟位置是顺时针旋转还是逆时针旋转)。但是,根据(默认为 False)的值,您可以做一些复杂的事情。
如果您想确保时钟指针顺时针转动,则应该将得到的角度加上 360 度(如果为负数)顺时针方向,而不是恢复该角度。
(注:我删除了旧答案;前两条评论指的是旧答案。)