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 ** 2math.sqrt(formula) 没有意义。你有什么公式来计算角度? tan⁡(angle)=y/x不是公式,然后需要改成angle = atan2(y/x)吗? 对于点AB,有长度为|A.x - B.x||A.y - B.y| 的线定义了一个直角三角形,其中斜边是点之间的线段(实际上有二,选一)。您可以使用余弦定律找到该三角形的内角。该内角将是与以您的一个点为中心的轴之一的角度。 (当您选择使用哪个三角形时,您选择了哪个)。 【参考方案1】:

您正在执行一些不需要的数学运算(例如** 2sqrt),您只需要math.atan2(这将产生AB 之间的弧度角):

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找到两点之间的角度的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 查找图像中两点之间的角度

提高两点之间的几何角度

Python / Pygame中的角度运动

寻找两点之间的角度

Java:以度为单位计算两点之间的角度

查找 2 条折线之间的角度