gpt4 book ai didi

javascript - 将点投影到路径上

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:47 26 4
gpt4 key购买 nike

假设我有一个包含描述路径的点(lat, lon) 的有序数组,并且我还有一个描述我当前位置的点(lat, lon)

如何将点投影到路径上(并将点放在数组中的适当位置)?

我尝试的只是简单地搜索最近的两个点并假设它在它们的中间。这是一个很好的猜测,但有时会失败。

这样做的好方法是什么?

最佳答案

我是这样看的:

line segment overview

  • p0,p1是路径线段端点
  • p 是你的位置
  • q' 3D 笛卡尔坐标线上最近的点
  • qq'球面投影校正

所以:

  1. 将点转换为 3D 笛卡尔坐标
  2. 计算点和线的垂直距离

    • q'=p0+(点(p-p0,p1-p0)*(p1-p0)/(|p-p0|*|p1-p0|))
    • perpendicular_distance = |p-q'|
  3. 找到具有最小 perpically_distance 的线段

    并且只将它用于其余的项目符号

  4. 计算q

    如果您使用 sphere 而不是 ellipsoid 那么您已经知道半径,如果不知道,那么要么用代数方法计算半径,要么使用平均值:

    r=0.5*(|p0-(0,0,0)|+|p1-(0,0,0)|)

    假设 (0,0,0) 是地球的中心。如果按位置加权,您也可以更精确:

    w=|q'-p0|/|p1-p0|
    r=(1-w)*|p0-(0,0,0)|+w*|p1-(0,0,0)|

    现在只需更正q'的位置

    q=q'*r/|q'|

    设置向量 q'q 大小 r 如果它不够明显。还有 |p0-(0,0,0)|=|p0| 显然,但我想确保你明白我是如何得到它的......

  5. q 从笛卡尔坐标转换为球面坐标

[注释]

  • |a| 是矢量 a 的大小,如下所示:|a|=sqrt(ax*ax+ay*ay+az*az)
  • dot(a,b) 是向量 a,b 的点积,如下所示:dot(a,b)=(a.b) =ax*bx+ay*by+az*bz

    如果您的路径形状不太复杂,那么您可以使用二进制搜索来找到最近的路段。对于距离比较,您不需要 sqrt ...

关于javascript - 将点投影到路径上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com