如何计算垂直于点的折线上的坐标(3D)?

how to calculate the coordinates on a polyline perpendicular to point (in 3D)?

提问人:tomp 提问时间:12/11/2021 最后编辑:Reblochon Masquetomp 更新时间:12/12/2021 访问量:163

问:

我有两条近似平行的折线表示铁轨,由数百个(也许是数千个)x、y、z 坐标组成。两条线路相距约1.435米,但像铁路一样弯曲和弯曲。

如果我在其中一条折线上选取一个点,如何找到垂直于另一条平行折线的点?

This would be like using a perpendicular snap in a CAD program (shown here using FreeCAD).

我认为 CAD 程序使用叉积来查找距离/点,并根据鼠标悬停的位置选择要捕捉到的线。

我想实现同样的事情,但不要将鼠标悬停在线上。

有没有办法简单地计算平行线上最近的线段?或者查看折线的哪一段在选定点处穿过垂直平面?

循环遍历这些段是不切实际的,因为它们太多了。

在 python 中,输入类似于 rail1 上的点 x、y、z,我希望输出 rail2 上的点 x、y、z。

非常感谢。

数学 矢量 几何 语言无关 的折线

评论

0赞 Tim Roberts 12/11/2021
好吧,您将不得不遍历这些段。给定该点,您必须在第 1 行中找到匹配的线段,以便您可以分辨出哪个方向是“垂直”的。然后,您必须遍历第 2 行的线段,以查看两侧 1.435m 的点是否在该线段上或该线段的一部分。
0赞 tomp 12/11/2021
谢谢。通过指定点,您还将指定第 1 行的线段。实际上,输入将是沿第 1 行的一个点,而不是 x、y、z。例如,第 1 行 100m 处的点。
0赞 tomp 12/11/2021
我想您可以过滤 rail2 的坐标以仅显示靠近 rail2 上指定点的坐标,然后循环浏览较少数量的段。我希望有一个更简单的解决方案。

答:

0赞 John Alexiou 12/12/2021 #1

您需要到另一条轨道的最小距离点。

如果另一条轨迹由线段定义,则每个线段跨越两个点,参数 t 介于 0 和 1 之间

pos(t) => pos_1 + t * ( pos_2 - pos_1 )

您需要找到产生到该点的最小距离的 t 值。在点上放置一个临时坐标系,并用与感兴趣点的相对坐标表示每个线段的末端。pos_1pos_2

最近点的 t 的值是

           dot(pos_1,pos_1) - dot(pos_1,pos_2)
t = ------------------------------------------------------
    dot(pos_1,pos_1)-2*dot(pos_1,pos_2)+dot(pos_2,pos_2)

其中是矢量点积。dot(a,b)=ax*bx+ay*by+az*bz

现在,如果得到的 t 介于 0 和 1 之间,则最近的点位于该段上,其坐标由下式给出

pos(t) => pos_1 + t * ( pos_2 - pos_1 )