如何计算弧度到度的不准确度

时间:2018-04-03 12:43:29

标签: python python-3.x gis geometry-surface

我正在尝试使用python中的简单数学执行一个简单的任务,我怀疑由于浮点数学错误而导致从弧度转换为度数的继承错误(如从主题上的另一个问题获得请不要不要将此标记为重复的问题,但事实并非如此。

我想把一条线延长500米。为此,我从提供的线获取端点坐标,并使用所述线的现有标题生成同一标题中500米点的坐标。

在这种情况下,标题很重要,因为它是我的错误的来源。或者我怀疑。

我使用以下函数来计算我的直角三角形的内角,使用现有的线条构建,或者在这种情况下我的斜边:

def intangle(xypoints):
    angle = []
    for i in xypoints:
        x1 = i[0][0]
        x2 = i[1][0]
        y1 = i[0][1]
        y2 = i[1][1]
        gradient = (x1 - x2)/(y1-y2)
        radangle = math.atan(gradient)
        angle.append((math.degrees(radangle)))

    return angle

我的输入点是,例如:

(22732.23679147904, 6284399.7935522054)
(20848.591367954294, 6281677.926560438)

我知道我的角度为35°,因为这些坐标是通过一个单独的函数以编程方式生成的,并且当每个KM绘制出的时间大约为3.75“。由于将弧度转换为度数而另一个误差是可接受的它的范围。

然而,上述函数产生的误差导致了一个角度,在我连接点时线条不再完全笔直的地方绘制我的新端点,我必须有一条直线。

如何解决浮点错误?它甚至可能吗?如果没有,那么使用欧几里德几何来扩展我的线多少米的接受方法是什么?

除此之外,我已经完成了所有相关的地理转换,并且我100%确定我正在处理2D平面,因此椭圆体等根本不起作用。

1 个答案:

答案 0 :(得分:1)

使用角度是不必要的,并且您的方式存在问题。使用atan只会给出-pi / 2和pi / 2之间的角度,并且您将获得相反方向的相同角度值。

你应该使用Thales:

import math

a = (22732.23679147904, 6284399.7935522054)
b = (20848.591367954294, 6281677.926560438)

def extend_line(a, b, length):
    """
    Returns the coordinates of point C at length beyond B in the direction of A->B"""
    ab = math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)
    coeff = (ab + length)/ab
    return (a[0] + coeff*(b[0]-a[0]), a[1] + coeff*(b[1]-a[1]) )

print(extend_line(a, b, 500))
# (20564.06031560228, 6281266.7792872535)