几何学:找到两点之间特定距离处的点

6
这与这个问题类似,但有点相反。
我有两个地理点(A和B的经纬度),它们相距40海里。我想计算从A点开始10海里处的坐标,沿着A和B之间的直线。我相信这是非常基本的数学,但是已经过了多年我没有做过这种数学(我每天使用其他一些种类的数学),所以我陷入了困境。任何指针都将不胜感激。我用Python编写了这个项目的代码,但是数学并不特定于某种语言,所以我并不真正关心这一点--我只想知道公式。

你所说的“从A到B的线”应该是指球面上的线,而不是在三维空间中穿过球体的直线,对吗?后者可能更容易编码,并且对于你的目的来说足够接近了。 - ShreevatsaR
是的,我指的是球面上的那条线。直线肯定更容易计算;我不确定它是否足够接近(我不知道在我处理的相对较短的距离上会有多大差异)。 - RustyAtMath
4个回答

8
您有两个位置向量,包含纬度和经度信息。通过这些信息,您可以计算出从点A到点B的方位角(如果您还不知道它)。有了方位角和距离,您就可以计算出新的纬度和经度。
您需要知道的所有数学内容都在此处引用:http://www.movable-type.co.uk/scripts/latlong.html。我很少处理这些东西,所以将该链接保存在某个地方(阅读:打印)是很好的。

4
所以,大概是这样的:
 x B (x2,y2)
  \
   \
    \
     \
      x C (x3, y3)
       \
        \
         \
          X A (x1,y1)

我会这样做,首先找到那条线的角度:
angle_A_B = arctan((y2-y1)-(x2-x1))

然后,假设A和C之间的距离已知(我们称其为距离_A_C):
sin(angle_A_B) = delta_x_A_C / distance_A_C
delta_x_A_C = distance_A_C * sin(angle_A_B)

因此:
x3 = x1+delta_x_A_C

"y3的值也是相同的:"
delta_y_A_C = distance_A_C * cos(angle_A_B)

因此:
y3 = y1+delta_y_A_C

我可能把符号弄混了,如果不起作用,请将 + 改为 -

这在球面上不起作用,这也是问题所在。它寻找的是“直线”,而不是大圆航线。 - ShreevatsaR
啊,好的。我没意识到它确实是针对地球表面的。 - slebetman
即使这个解决方案与原问题不是100%准确,但对我非常有帮助。此算法的JS实现 - fguillen

0
你可以使用我的简单包来帮助你: 链接:https://www.npmjs.com/package/haversine-calculator
const haversineCalculator = require('haversine-calculator')

const start = {
  latitude: -23.754842,
  longitude: -46.676781
}

const end = {
  latitude: -23.549588,
  longitude: -46.693210
}

console.log(haversineCalculator(start, end))
console.log(haversineCalculator(start, end, {unit: 'meter'}))
console.log(haversineCalculator(start, end, {unit: 'mile'}))
console.log(haversineCalculator(start, end, {threshold: 1}))
console.log(haversineCalculator(start, end, {threshold: 1, unit: 'meter'}))
console.log(haversineCalculator(start, end, {threshold: 1, unit: 'mile'}))

0

我相信Haversine Formula可以在这里应用。如果需要,我已经在C#,Java和Javascript中实现了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接