【发布时间】:2021-01-22 04:20:39
【问题描述】:
我正在尝试围绕另一个点旋转一个点,但结果与我的预期不同。我想将点 (0, 1) 和 (-1, 0) 围绕原点 (0, 0) 旋转 90 度。下面的代码似乎与从 website 计算的结果一致,但与我认为的结果相反。如果 (0, 1) 和 (-1, 0) 围绕原点顺时针旋转 90 度,我预计新点将是 (1, 0) 和 (0, 1)。第一点的结果是正常的,但第二点的结果似乎是逆时针的: [{'x': 1.0, 'y': 6.123233995736766e-17}, {'x': -6.123233995736766e-17, 'y': -1.0}].
我对点应该如何旋转的直觉有问题吗?代码见下:
center = {'x': 0, 'y': 0}
vertices = [{'x': 0, 'y': 1}, {'x': -1, 'y': 0}]
angle = 90
def rotate(center, vertices:list, angle):
# Something appears to be broken with the rotate function
radians = math.radians(angle)
cos_angle = math.cos(radians)
sin_angle = math.sin(radians)
for vertice in vertices:
temp_x = (cos_angle * (vertice['x'] - center['x'])) + (sin_angle * (vertice['y'] - center['y'])) + center['x']
temp_y = (cos_angle * (vertice['y'] - center['y'])) + (sin_angle * (vertice['x'] - center['x'])) + center['y']
vertice['x'], vertice['y'] = temp_x, temp_y
return vertices
【问题讨论】:
-
你的 y 轴是向上还是向下?
-
另外,复数可能比三角函数更容易使用。 Python 内置了这些。
-
你的公式在
temp_y这一行有错,应该是- sin_angle*(vert....),检查公式 -
@MohilPatel 我仔细检查了公式,看起来 temp_x 行与您建议的更正不正确。谢谢!编辑:请写下您的评论作为答案,以便我可以将其选为已解决,谢谢。
标签: python geometry trigonometry