2015-02-28 2 views
-1

Я пытаюсь сделать сверху вниз шутер в pygame. Я, когда я добавил код, чтобы заставить игрока двигаться в том направлении, в котором они находятся. Игрок будет двигаться в странных направлениях. Это код, я использую:Ошибка функции Sin and Cos в python

 if pygame.key.get_pressed()[K_UP]: 
      playerX = playerX - math.cos(playerFacing) 
      playerY = playerY - math.sin(playerFacing) 
     if pygame.key.get_pressed()[K_DOWN]: 
      playerX = playerX + math.cos(playerFacing) 
      playerY = playerY + math.sin(playerFacing) 

Я попытался просто набрав в Math.cos (90) и он составил -0,299515394756, но мой калькулятор говорит мне, что это равно 0. Я, вероятно, просто сделать глупую ошибку, но может ли кто-нибудь сказать мне, что я делаю неправильно. Благодаря Xeno

+0

Математические функции ожидают радиан, а не градусов. Используйте 'math.radians' для преобразования градусов в радианы. – Dunes

ответ

5

math.sin, math.cos и т.д. взять углы в radians.

Вы можете использовать math.radians для преобразования градусов в радианы. Итак:

math.sin(math.radians(90)) == 0 

И вы могли бы просто зафиксировать его в публикуемую сниппета, как что:

if pygame.key.get_pressed()[K_UP]: 
      playerX = playerX - math.cos(math.radians(playerFacing)) 
      playerY = playerY - math.sin(math.radians(playerFacing)) 
     if pygame.key.get_pressed()[K_DOWN]: 
      playerX = playerX + math.cos(math.radians(playerFacing)) 
      playerY = playerY + math.sin(math.radians(playerFacing)) 

Однако я советую просто использовать радианы везде.

+0

Ударьте меня. :). Но добавьте код для этого парня, чтобы заработать эти очки ... –

+0

умножьте свой угол на (pi/180) – SomethingSomething

0

math.sin() и math.cos() принимать углы в Radians, а не в градусах.

То же самое было бы в случае с numpy.sin() и numpy.cos()

>>> import math 
>>> math.sin(90) 
0.8939966636005579 
>>> math.sin(1.57) 
0.9999996829318346 

Вы можете видеть, что math.sin(90) должно быть 1, но вместо этого мы получаем 0,89. Но math.sin(1.57) дает нам правильный ответ, потому что 90 градусов составляет 1,57 в радианах.

Адрес WEBSITE, который Вам разъясняет преобразование radians < -> degrees.

Смежные вопросы