Python - 2 математических вопроса - PullRequest
1 голос
/ 05 февраля 2011

Привет, я использую pyGame и хочу:

А) создать функцию, которая возвращает угол между двумя точками. Я пытался сделать это с math.atan2, и я получаю очень странные доходы. Я попробовал это с обоими (delta X, deltaY) и (deltaY, deltaX). Есть предложения?

B) учитывая длину и угол, верните точку, используя эти два из 0. Например, LengthDir (2,45) с использованием (длина, угол) вернет (2,2).

Спасибо за помощь. Я искал по всему интернету, и я не мог найти ничего, чтобы помочь мне ...

Ответы [ 3 ]

4 голосов
/ 05 февраля 2011

math.atan2 возвращает радианы . Если вам нужна степень, умножьте результат на 180 / π.

def A(dx, dy):
  return math.atan2(dy, dx) * 180 / math.pi

Аналогично, все тригонометрические функции в math работают в радианах. Если вы вводите градус, вам нужно сначала умножить на π / 180.

def LengthDir(length, angle):
  radian_angle = angle * math.pi / 180
  return (length * math.cos(radian_angle), length * math.sin(radian_angle))

Python предоставляет удобные функции math.degrees и math.radians, поэтому вам не нужно запоминать постоянную 180 / π.

def A(dx, dy):
  return math.degrees( math.atan2(dy, dx) )

def LengthDir(length, angle):
  radian_angle = math.radians(angle)
  return (length * math.cos(radian_angle), length * math.sin(radian_angle))
1 голос
/ 05 февраля 2011

Вы можете использовать функции из cmath для преобразования прямоугольных и полярных координат. Например:

import math, cmath

def LengthDir(r, phi):
   c = cmath.rect(r, math.radians(phi))
   return (c.real, c.imag)

def AngleBetween((x1, y1), (x2, y2)):
   phi = cmath.phase(x2 + y2*j) - cmath.phase(x1 + y1*j)
   return math.degrees(phi) % 360
0 голосов
/ 05 февраля 2011
import math

def dist(dx,dy):
    return math.sqrt(dx*dx + dy*dy)

def ang(dx, dy):
    return math.degrees(math.atan2(dy, dx))

def offs(dist, ang):
    ang = math.radians(ang)
    dx = dist * math.cos(ang)
    dy = dist * math.sin(ang)
    return dx,dy

.

dist(2,2) -> 2.8284
ang(2,2) -> 45.0
offs(2, 45) -> (1.414, 1.414)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...