嘿,我正在使用pyGame,我想:
A)创建一个返回两点之间角度的函数。我已经尝试用math.atan2做这件事,我得到了非常奇怪的回报。我用两个(delta X,deltaY)和(deltaY,deltaX)尝试了这个。有什么建议吗?
B)给定长度和角度,使用0中的那两个返回一个点。 例如,使用(长度,角度)的LengthDir(2,45)将返回(2,2)。
感谢您的帮助。我在互联网上搜索过,找不到任何可以帮助我的东西......
答案 0 :(得分:4)
math.atan2
返回radians。如果需要度数,请将结果乘以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 :(得分:1)
您可以使用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
答案 2 :(得分:0)
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)