【问题标题】:How can I find the first point along a heading that is a specified distance away from a line segment?如何找到距线段指定距离的航向的第一个点?
【发布时间】:2010-02-02 01:22:15
【问题描述】:

给定一个起点、一个航向、一个距离和一条线段,找到沿该航向的第一个点,该点距该线段指定距离。

我介绍了两个案例,但我没能介绍最后一个。

第一种情况:远离线路。即使起点在指定距离内,也忽略它。

第二种情况:它与直线相交。我用三角和三角形解决了它。最初没有考虑下一个案例。

第三种情况:它正朝着直线前进,但不相交。我认为如果正确完成,这也将解决第二种情况。

三个子案例:

  1. 最小线距离大于指定距离。忽略它。

  2. 最小线距离等于指定距离。已经找到积分了。

  3. 最小线距小于指定距离。这意味着从沿航向到线段端点的垂直线小于所需距离。这也意味着在这条垂直线的两侧将有两条所需距离的线。一个垂直于航向,而另一个最接近同一端点且不垂直于航向。只需找到这些点并查看哪个更接近起点。

这就是我今天卡住的地方。绘制它很容易,但进行矢量计算或其他任何事情变得棘手。

可以改写为:

P(t) = P0 + t*v 与线段 L((x1,y1), (x2,y2)) 的距离为 D 什么时候?

v=(sin(heading), -cos(heading)) 就我而言。

【问题讨论】:

    标签: line distance vector segment heading


    【解决方案1】:

    Shoot mang 您的解决方案并不总是有效。我找到了一个反例:

    线段 = (0,0) -> (0,14)

    起点 = (19, 6) @ 向西/逆时针方向 -159.5 或 200.5

    它将在 (2.952, 0.0) 处与直线相交,所以我问,它在 0.0 距离内的位置。

    我得到的结果不正确。

    http://img5.imageshack.us/i/failuref.png/

    我如何判断哪些可以使用您的解决方案,哪些不可用取决于点和线段之间的最小起始距离是否创建了一条垂直线。

    如果我下一篇可以再发一张图,我会放成功的例子。

    我本来想为 Sage 发布一些生成这些图像的代码,但不幸的是代码标签接受了 python。

    【讨论】:

      【解决方案2】:

      点到线段的最小起始距离垂直于线段的成功结果:

      http://img46.imageshack.us/i/success.png/

      【讨论】:

        【解决方案3】:

        您好,我最终想出了解决方案。

        1. 光线是否与平行且与线段相距指定距离 D 的线段相交。只需绘制一个矩形并检查平行于线段的边。

        2. 射线是否在线段的每个端点与半径为 D 的圆相交。

        3. 最小化总单位时间以找到远离线段 D 沿射线的第一个点。

        可能的边界情况:起点是否在 D 之内并且头部远离线?如何处理这种情况取决于用户。

        【讨论】:

          【解决方案4】:

          谢谢,这行得通。 我通过这种方式找到了 alpha:

          heading = 45.0*pi/180. #heading 45 degrees.
          if x1 > x2: #line segment (x1,y1)<->(x2,y2)
              dx = x2 - x1
              dy = y2 - y1
          else:
              dx = x1 - x2
              dy = y1 - y2
          
          segmentHeading = atan2(dx, dy)
          
          if heading > 0:
              alpha = segmentHeading + heading
          else:
              alpha = -segmentHeading + heading
          
          t = abs( (dStart - D) / -cos(alpha) ) #-cos in python, sin in C.
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-02
            • 1970-01-01
            • 2010-10-25
            • 2021-11-05
            相关资源
            最近更新 更多