给定一个起点,一个标题,一个距离,一个线段,发现沿着这个航向,它是指定距离该线段的第一个点。
我介绍了两种情况,但我一直没能覆盖的最后一个。
第一种情况:从标题行了。 忽略它即使出发点是在指定的范围内。
第二种情况:它与线相交。 我解决了它使用三角函数和三角。 最初并没有考虑接下来的情况。
第三种情况:据地走向线,但它不相交的。 我想,如果它的正确完成,这将解决第二种情况下也是如此。
三子情况:
最小线距离比规定距离大。 忽略它。
最小线距离等于规定的距离。 已发现的点。
最小线距离小于规定的距离。 这意味着存在来自沿着标题的垂直线线段小于所需要的距离的端点。 这也意味着,在该垂线的任一侧将是所需要的距离的两行。 一个是垂直的标题,而另一个则是最接近于同一个端点,而不是垂直的标题。 找到这些点,看到哪一个更接近起点的只是一个问题。
这就是今天我在哪里卡住了。 绘制起来很容易,但这样做的向量计算或任何横空出世棘手。
这是可能的重组此为:
在什么时间(s)为P(t) = P0 + t*v
在距离D
从该线段L((x1,y1), (x2,y2))
v=(sin(heading), -cos(heading))
在我的情况。
拍摄莽您的解决方案并不总是奏效。 我发现了一个反例:
线段=(0,0) - >(0,14)
开始点=(19,6)@标题西-159.5或200.5 /逆时针
它会相交于(2.952,0.0)行所以我想问,它在哪里它都在0.0以内的距离。
结果我得到的是不正确。
http://img5.imageshack.us/i/failuref.png/
我怎样才能知道哪些会工作中使用您的解决方案,哪些不工作所依赖的点和线段之间的最小起始距离是否创建一个垂直线上。
如果我可以张贴在接下来的文章中另一张照片,我会把成功的例子。
我也喜欢张贴贤者一些代码,这些图表,但代码标签不幸接受蟒蛇。
一个成功的结果,其中的点和线段之间的最小起始距离是垂直于该线段:
http://img46.imageshack.us/i/success.png/
喜的解决方案,我终于来到了。
是否射线相交线段平行且从该线段远离指定距离d。 只是绘制一个矩形和检查平行线段的两侧。
是否光线以线段的每个端点相交半径d的圆。
最小化总单位时间找到沿着为D从该线段远离射线的第一点。
可能的情况下边框:距离d和从头部走行的起点? 截至用户如何处理这种情况。
谢谢,这工作。 我发现阿尔法是这样的:
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.
文章来源: How can I find the first point along a heading that is a specified distance away from a line segment?