Py学习  »  Python

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

ImLearning • 3 年前 • 1339 次点击  

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
 
1339 次点击  
文章 [ 3 ]  |  最新文章 3 年前
Ibrahim
Reply   •   1 楼
Ibrahim    3 年前

可以使用简单的三角法,首先计算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    3 年前

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

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    3 年前

这是应用程序的经典用例 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 你也可以考虑把你的角度放在弧度上,这样就方便多了(因为其他三角函数都是弧度的)。