首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python -2数学问题

python -2数学问题
EN

Stack Overflow用户
提问于 2011-02-06 03:11:36
回答 3查看 1.7K关注 0票数 1

嘿,我在用pyGame,我想:

A)创建一个函数,返回两点之间的角度。我试过用math.atan2做这件事,我得到了非常奇怪的回报。我尝试了(增量X,deltaY)和(deltaY,deltaX)。有什么建议吗?

B)给定一个长度和一个角度,使用0中的这两个返回点。例如,使用(长度,角度)的LengthDir(2,45)将返回(2,2)。

谢谢你的帮助。我在网上找遍了也找不到任何能帮到我的东西...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-06 03:15:38

math.atan2返回radians。如果需要度数,请将结果乘以180/π。

代码语言:javascript
运行
复制
def A(dx, dy):
  return math.atan2(dy, dx) * 180 / math.pi

类似地,math中的所有三角函数都是以弧度运行的。如果你输入一个度,你需要先乘以π/180。

代码语言:javascript
运行
复制
def LengthDir(length, angle):
  radian_angle = angle * math.pi / 180
  return (length * math.cos(radian_angle), length * math.sin(radian_angle))

Python提供了方便的函数math.degreesmath.radians,因此您不需要记住常量180/π。

代码语言:javascript
运行
复制
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))
票数 4
EN

Stack Overflow用户

发布于 2011-02-06 03:42:15

您可以使用cmath中的函数在直角坐标和极坐标之间进行转换。例如:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2011-02-06 03:32:28

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
dist(2,2) -> 2.8284
ang(2,2) -> 45.0
offs(2, 45) -> (1.414, 1.414)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4909016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档