如何在pygame中找到2点之间的角度?

时间:2012-05-06 20:18:39

标签: python geometry line pygame

我正在用Pygame用Python编写游戏 (我的显示窗口)的合作伙伴是
左上角( 0 , 0 )和 右下角(640,480)

角度为
向上时
指向右边时90°

我有一个中心位置的玩家精灵,我希望枪上的炮塔指向玩家。我该怎么做? 说,
x1y1是炮塔合作伙伴 x2y2是玩家合作伙伴 a是角度的度量

4 个答案:

答案 0 :(得分:24)

首先,math有一个方便的atan2(denominator, numerator)功能。通常,你使用atan2(dy,dx)但是因为Pygame相对于笛卡尔坐标翻转y轴(如你所知),你需要使dy为负,然后避免负角度。 (“dy”仅表示“y的变化”。)

from math import atan2, degrees, pi
dx = x2 - x1
dy = y2 - y1
rads = atan2(-dy,dx)
rads %= 2*pi
degs = degrees(rads)

degs应该是你正在寻找的东西。

答案 1 :(得分:2)

考虑一个三角形

sin(angle)=opposed side / hypotenuse

答案 2 :(得分:1)

你可能想要这样的东西 - 你可能需要摆弄一下 - 我可能会偏离180度。你还需要特殊情况下dy == 0,这是我没有为你做的。

import math
# Compute x/y distance
(dx, dy) = (x2-x1, y2-y1)
# Compute the angle
angle = math.atan(float(dx)/float(dy))
# The angle is in radians (-pi/2 to +pi/2).  If you want degrees, you need the following line
angle *= 180/math.pi
# Now you have an angle from -90 to +90.  But if the player is below the turret,
# you want to flip it
if dy < 0:
   angle += 180

答案 3 :(得分:-4)

好的,结合您的答案和其他一些网站,我找到了工作代码:

dx,dy = x2-x1,y2-y1

rads = math.atan2(dx/dy)
degs = math.degrees(rads)

我的其余代码并不挑剔degs的负值;无论如何,它现在有效,我想感谢您的帮助。