如何计算的线和水平轴之间的角度? [英] How to calculate the angle between a line and the horizontal axis?

查看:442
本文介绍了如何计算的线和水平轴之间的角度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一种编程语言(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆