Python Pygame 求两点间的夹角
Python Pygame find angle between two points
我目前正在制作一个游戏,其中包含始终面向鼠标的精灵图像。我到处寻找执行此操作的功能,但似乎找不到。
有没有办法计算一个点到另一个点的角度差?
例如:
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)
这会计算出角度的差异,但这并不是 return 正确的答案。知道哪里出了问题吗?
你正在做一些不需要的数学运算(比如** 2
和sqrt
),你只需要math.atan2
(这将产生[之间的弧度角) =14=] 和 B
):
math.atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)
math.atan2
的好处是在 deltaX == 0
.
时也可以工作
如果你真的需要角度
angle = math.atan2(ymouse-ysprite, xmouse-xsprite)
如果您更需要正弦和余弦
dy, dx = ymouse-ysprite, xmouse-xsprite
r = math.hypot(dx, dy)
s, c = dy/r, dx/r
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
我目前正在制作一个游戏,其中包含始终面向鼠标的精灵图像。我到处寻找执行此操作的功能,但似乎找不到。 有没有办法计算一个点到另一个点的角度差? 例如:
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)
这会计算出角度的差异,但这并不是 return 正确的答案。知道哪里出了问题吗?
你正在做一些不需要的数学运算(比如** 2
和sqrt
),你只需要math.atan2
(这将产生[之间的弧度角) =14=] 和 B
):
math.atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)
math.atan2
的好处是在 deltaX == 0
.
如果你真的需要角度
angle = math.atan2(ymouse-ysprite, xmouse-xsprite)
如果您更需要正弦和余弦
dy, dx = ymouse-ysprite, xmouse-xsprite
r = math.hypot(dx, dy)
s, c = dy/r, dx/r
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