如何计算的线和水平轴之间的角度? [英] How to calculate the angle between a line and the horizontal axis?
问题描述
在一种编程语言(Python和C#等)我需要确定如何计算线与横轴之间的角度θ
In a programming language (Python, C#, etc) I need to determine how to calculate the angle between a line and the horizontal axis?
我觉得图片介绍最好的,我想要什么:
I think an image describes best what I want:
由于(P1 X ,P1 是)和(P2 X ,P2 是)是什么计算这个角度最好的方法?原点是在左上和仅使用正象限
Given (P1x,P1y) and (P2x,P2y) what is the best way to calculate this angle? The origin is in the topleft and only the positive quadrant is used.
推荐答案
首先找到起点和终点之间的差异。
First find the difference between the start point and the end point.
deltaY = P2_y - P1_y
deltaX = P2_x - P1_x
然后计算的角度。
Then calculate the angle.
angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
如果你的语言包括它变成了一个 ATAN2
函数以下代替:
If your language includes an atan2
function it becomes the following instead:
angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
使用弧度(由Eric Leschinski,谁编辑我的答案提供)了一个Python实现:
from math import *
def angle_trunc(a):
while a < 0.0:
a += pi * 2
return a
def getAngleBetweenPoints(x_orig, y_orig, x_landmark, y_landmark):
deltaY = y_landmark - y_orig
deltaX = x_landmark - x_orig
return angle_trunc(atan2(deltaY, deltaX))
angle = getAngleBetweenPoints(5, 2, 1,4)
assert angle >= 0, "angle must be >= 0"
angle = getAngleBetweenPoints(1, 1, 2, 1)
assert angle == 0, "expecting angle to be 0"
angle = getAngleBetweenPoints(2, 1, 1, 1)
assert abs(pi - angle) <= 0.01, "expecting angle to be pi, it is: " + str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 3)
assert abs(angle - pi/2) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 0)
assert abs(angle - (pi+pi/2)) <= 0.01, "expecting angle to be pi+pi/2, it is: " + str(angle)
angle = getAngleBetweenPoints(1, 1, 2, 2)
assert abs(angle - (pi/4)) <= 0.01, "expecting angle to be pi/4, it is: " + str(angle)
angle = getAngleBetweenPoints(-1, -1, -2, -2)
assert abs(angle - (pi+pi/4)) <= 0.01, "expecting angle to be pi+pi/4, it is: " + str(angle)
angle = getAngleBetweenPoints(-1, -1, -1, 2)
assert abs(angle - (pi/2)) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)
所有的测试都通过了。请参见 https://en.wikipedia.org/wiki/Unit_circle
这篇关于如何计算的线和水平轴之间的角度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!