【问题标题】:how to calculate the coordinates on a polyline perpendicular to point (in 3D)?如何计算垂直于点的折线上的坐标(3D)?
【发布时间】:2022-01-15 11:42:18
【问题描述】:

我有两条近似平行的折线代表铁路轨道,由数百个(可能数千个)x、y、z 坐标组成。两条线相距约 1.435m,但会像铁路一样弯曲和弯曲。

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

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

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

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

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

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

非常感谢。

【问题讨论】:

  • 好吧,你将不得不遍历这些片段。鉴于这一点,您必须在第 1 行中找到匹配的线段,这样您才能分辨出哪个方向是“垂直的”。然后您必须遍历第 2 行的线段,以查看任一侧 1.435m 的点是否在该线段上或该线段的一部分。
  • 谢谢。通过指定点,您还将指定第 1 行的线段。实际上,输入将是沿第 1 行的一个点,而不是 x、y、z。例如第 1 行 100m 处的一个点。
  • 我想您可以过滤 rail2 的坐标以仅显示 rail2 上指定点附近的坐标,然后循环穿过较少数量的线段。我希望有一个更简单的解决方案。

标签: math vector geometry language-agnostic polyline


【解决方案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 )

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多