Python Pygame找到两点之间的角度
Posted
技术标签:
【中文标题】Python Pygame找到两点之间的角度【英文标题】:Python Pygame find angle between two points 【发布时间】:2017-01-11 19:25:44 【问题描述】:我目前正在制作一款游戏,其中包含始终面向鼠标的精灵图像。我到处寻找可以做到这一点的功能,但似乎找不到。 有没有办法计算从一个点到另一个点的差异角度? 例如:
angleA_X, angleA_Y = (12, 52)
angleB_X, angleB_Y = (45, 11)
deltaX = angleB_X - angleA_X
deltaY = angleB_Y - angleA_Y
tan = deltaX/deltaY
formula = math.atan(tan)
formula = formula ** 2
formula = math.sqrt(formula)
formula = math.degrees(formula)
print(formula)
这将计算角度的差异,但这不会返回正确的答案。知道有什么问题吗?
【问题讨论】:
formula ** 2
和 math.sqrt(formula)
没有意义。你有什么公式来计算角度? tan(angle)=y/x
不是公式,然后需要改成angle = atan2(y/x)
吗?
对于点A
和B
,有长度为|A.x - B.x|
和|A.y - B.y|
的线定义了一个直角三角形,其中斜边是点之间的线段(实际上有二,选一)。您可以使用余弦定律找到该三角形的内角。该内角将是与以您的一个点为中心的轴之一的角度。 (当您选择使用哪个三角形时,您选择了哪个)。
【参考方案1】:
您正在执行一些不需要的数学运算(例如** 2
和sqrt
),您只需要math.atan2
(这将产生A
和B
之间的弧度角):
math.atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)
math.atan2
的好处是在deltaX == 0
时也可以工作。
【讨论】:
我在我的程序中使用formula = math.degrees(((math.atan2(angleB_Y - angleB_Y, angleB_X - angleA_X))))
对此进行了测试,但它返回了 awnser:104.036243468,我自己计算了一下,得到了 75 左右。我做错了什么吗?编辑-我输入值 angleA = (5, 2) angleB = (4, 6)
@BobJohnson 你有angleB_Y - angleB_Y
,它总是给0
@BobJohnson 在atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)
中将A
替换为B
,然后就可以绕过-75
。顺便说一句:104.036243468 + around 75
给了around 180
。
我修复了它,它仍然给我同样的答案。
我用angleA = (5, 2) angleB = (4, 6)
尝试了atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)
,它给了我-75
周围的信息【参考方案2】:
PyGame
有pygame.math.Vector2() 有angle_to()
import pygame
angleA_X, angleA_Y = (12, 52)
angleB_X, angleB_Y = (45, 11)
a = pygame.math.Vector2(angleA_X, angleA_Y)
b = pygame.math.Vector2(angleB_X, angleB_Y)
zero = pygame.math.Vector2()
print( zero.angle_to(a-b) ) # 128.8298249049704
【讨论】:
尝试运行它,pygame 没有属性'math'。你用的是什么pygame版本? Linux 上的 pygame 1.9.2 - 请参阅文档链接。它说它是实验性的,也许你的版本没有它【参考方案3】:如果你真的需要角度
angle = math.atan2(ymouse-ysprite, xmouse-xsprite)
如果你更需要正弦和余弦
dy, dx = ymouse-ysprite, xmouse-xsprite
r = math.hypot(dx, dy)
s, c = dy/r, dx/r
【讨论】:
以上是关于Python Pygame找到两点之间的角度的主要内容,如果未能解决你的问题,请参考以下文章