如何解释弧度到度数的不准确性
How to account for radian to degrees inaccuracy
我正在尝试使用 python 中的简单数学来执行一个简单的任务,我怀疑从弧度转换为度数的继承错误是由于浮点数学错误(从另一个关于该主题的问题请不要将此标记为重复问题,不是)。
我正在尝试将一条线延长 500 米。为此,我从提供的线中获取端点坐标,并使用该线的现有标题生成同一标题中 500m 的点的坐标。
标题在这种情况下很重要,因为它是我错误的根源。或者我怀疑。
我使用以下函数计算我的直角三角形的内角,使用现有的线构建,或者在这种情况下我的斜边:
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 平面上工作,因此椭圆体等根本不会发挥作用。
使用角度是不必要的,而且你做的方式有问题。使用 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)
我正在尝试使用 python 中的简单数学来执行一个简单的任务,我怀疑从弧度转换为度数的继承错误是由于浮点数学错误(从另一个关于该主题的问题请不要将此标记为重复问题,不是)。
我正在尝试将一条线延长 500 米。为此,我从提供的线中获取端点坐标,并使用该线的现有标题生成同一标题中 500m 的点的坐标。
标题在这种情况下很重要,因为它是我错误的根源。或者我怀疑。
我使用以下函数计算我的直角三角形的内角,使用现有的线构建,或者在这种情况下我的斜边:
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 平面上工作,因此椭圆体等根本不会发挥作用。
使用角度是不必要的,而且你做的方式有问题。使用 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)