如何计算直线和任意形状的交点?

时间:2010-06-19 22:53:32

标签: javascript algorithm geometry canvas computational-geometry

有没有办法以几何方式计算直线和任意图形路径的交点?我知道路径中的所有行和曲线在哪里,并且我正在使用HTML5 canvas元素,如果这有助于任何。基本上,我可以访问所有画布绘图命令及其参数。例如,如果使用lineTo调用API,则使用moveTo,然后使用arc获取所有该信息。每次调用API都存储在一个数组中。我有路径定义,我只是想弄清楚线与路径相交的位置。下面的图片显示了我需要找到的点的一个例子。

alt text http://cl.ly/3228b0e7ea32b172e960/content

感谢您的帮助!同样,如果可能的话,我宁愿做几何而不是基于像素。

4 个答案:

答案 0 :(得分:6)

您可能想看一下Kevin Lindsey的Javascript几何库 - 它可能包含您正在寻找的所有intersection算法:http://www.kevlindev.com/geometry/index.htm

答案 1 :(得分:0)

在不知道如何定义图形路径的情况下,使用具体算法回答您的问题是不可能的。 this book on algorithms中有一个直线段的解决方案。

答案 2 :(得分:0)

如果你有所有方程式,那么你可以做到(理论上)。在实践中,它并不那么容易(特别是在一般情况下不是这样)。 This discussion对相交线和贝塞尔曲线有一些很好的建议。

答案 3 :(得分:0)

你想要一条直线和一个“样条”x(t),y(t)相交,对于x(t)和y(t),它应该是最多4次多项式。你编写了解决方程式,但是你需要知道所有的参数。如果解决方案超出任一范围(线段和样条线段具有开始和结束) - 丢弃它。相关问:

The intersection point between a spline and a line