社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-计算从object1(x和y)到object2(x和y)的角度

ImLearning • 2 年前 • 1216 次点击  

enter image description here 我需要Python中的示例,如何计算函数,如:

AngleFromObject1ToObject2InDegrees(object1, object2) # return float from 0.0 to 359.00 like 0-360 degrees, 360 = 0
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132496
 
1216 次点击  
文章 [ 3 ]  |  最新文章 2 年前
Ibrahim
Reply   •   1 楼
Ibrahim    2 年前

可以使用简单的三角法,首先计算object1和object2之间的水平距离,即 x_2 - x_1 然后计算垂直距离b/w object1和object2,即 y_2 - y_1 .水平距离是我们的基础,垂直距离是我们的垂线。 perpendicular/base = tan(θ) 现在倒过来 atan(perpendicular/base) = θ

在python中实现这一点的方法很简单,您可以使用 math.atan 为了达到你的目的 math.atan((y2-y1)/(x2-x1))

Shmack
Reply   •   2 楼
Shmack    2 年前

我们的想法是将其中一个点平移到原点,将另一个点偏移到与移动到原点的点偏移相同的距离,然后将第二个点(不是原点)转换为极坐标。它返回的是原点和点之间的距离,以及角度。

import math
# where object1 and object2 are tuples of x, y pairs
def AngleFromObject1ToObject2InDegrees(object1, object2):
    translate_to_origin = (object1[0] - 0, object1[1] - 0)
    new_points = (object2[0] - translate_to_origin[0], object2[1] - translate_to_origin[1])
    return (math.sqrt(new_points[0] ** 2 + new_points[1] ** 2), math.degrees(math.atan(new_points[1] / new_points[0])))

print(AngleFromObject1ToObject2InDegrees((1,1),(5,5)))
print(AngleFromObject1ToObject2InDegrees((5,5),(1,1)))

作为“一行”:

import math
# where object1 and object2 are tuples of x, y pairs
def AngleFromObject1ToObject2InDegrees(object1, object2):
    return (math.sqrt((object2[0] - object1[0]) ** 2 + (object2[1] - object1[1]) ** 2), math.degrees(math.atan((object2[1] - object1[1]) / (object2[0] - object1[0]))))

print(AngleFromObject1ToObject2InDegrees((1,1),(5,5)))
print(AngleFromObject1ToObject2InDegrees((5,5),(1,1)))
Blckknght
Reply   •   3 楼
Blckknght    2 年前

这是应用程序的经典用例 math.atan2 功能:

from math import atan2, degrees

def AngleFromObject1ToObject2InDegrees(object1, object2):
    return degrees(atan2(object2.y - object1.y, object2.x - object1.x))

请注意,这使用了沿正x轴(向右)从零开始并逆时针增加的角度的数学约定。如果你愿意 0 要使它们上升并顺时针增加(如磁罗盘刻度盘上的轴承),可以将参数转换为 atan2 你也可以考虑把你的角度放在弧度上,这样就方便多了(因为其他三角函数都是弧度的)。