对于我不会涉及的上下文,我需要两个基本上彼此互逆的函数.
angle_to()应该返回clockhand必须转向从0°行进到连接p1到p2的线的度数(即p1是旋转中心),并且p1和p2都是像素坐标.
point_pos()应该返回长度幅度的钟表将转向角度的像素坐标.
对于两者,正x轴= 0°= 3点,并且参数旋转应该在计算开始之前沿顺时针或逆时针方向移动该轴;然后说计算应该与这个调整后的参考方向一致.
我在每个方面取得的进展如下:失败的是:
当顺时针= False时,它返回顺时针条件的正确答案;当顺时针= True时,angle_between()返回带有舍入错误的正确答案,而point_pos()完全给出了错误的答案.
我还附上了一个我在Illustrator中嘲笑的视觉解释,作为对互联网的道歉,因为无法解决这个问题,以及我所寻求的不清楚.
编辑:根据下面的一个答案清理了一条不必要复杂的行.
from math import sin, cos, radians, pi, atan2, degrees
def angle_to(p1, p2, rotation=0, clockwise=False):
if abs(rotation) > 360:
rotation %= 360
p2 = list(p2)
p2[0] = p2[0] - p1[0]
p2[1] = p2[1] - p1[1]
angle = degrees(atan2(p2[1], p2[0]))
if clockwise:
angle -= rotation
return angle if angle > 0 else angle + 360
else:
angle = (360 - angle if angle