В настоящее время я делаю игру, в которой спрайт-изображение всегда обращено к мышке. Я везде искал функцию, которая делает это, но я не могу найти ее. Есть ли способ рассчитать угол разницы от одной точки к другой? Пример:

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)

Это вычислит разницу в угле, но это не вернет правильный ответ. Есть идеи, что не так?

0
user4609262 11 Янв 2017 в 22:25

3 ответа

Лучший ответ

Вы делаете некоторые математические операции, которые вам не нужны (например, ** 2 и sqrt), вам просто нужно math.atan2 (это даст угол в радианах между A и { { Х4 } } ) :

math.atan2(angleA_Y - angleB_Y, angleA_X - angleB_X)

math.atan2 имеет то преимущество, что он также работает, когда deltaX == 0.

2
Francisco Couzo 11 Янв 2017 в 19:40

Если вам действительно нужен угол

angle = math.atan2(ymouse-ysprite, xmouse-xsprite)

Если вам нужно синус и косинус

dy, dx = ymouse-ysprite, xmouse-xsprite
r = math.hypot(dx, dy)
s, c = dy/r, dx/r
0
gboffi 11 Янв 2017 в 19:46

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
0
furas 11 Янв 2017 в 20:18