在绘图引擎中找到交叉线

时间:2012-06-22 07:18:57

标签: algorithm actionscript-3

我正在开展一个小型多媒体项目,其中用户可以通过连接点与线条在画布(2d)上绘制形状。 但我需要禁止用户穿越线路。

我正在寻找的是一个可以找到相交线的小算法。 该项目是在AS3 / Flash中完成的,但我想答案是普遍的。

谁能给我一个线索?

感谢

2 个答案:

答案 0 :(得分:2)

以下是Java中的一个示例,但我认为您可以轻松适应AS3:

public static boolean intersects(double ax, double ay, double bx, double by,
        double cx, double cy, double dx, double dy) {
    double denum = ((bx-ax)*(dy-cy)-(by-ay)*(dx-cx));
    if (denum == 0) return false; // parallel segments
    double r = ((ay-cy)*(dx-cx)-(ax-cx)*(dy-cy)) / denum;
    double s = 
            ((ay-cy)*(bx-ax)-(ax-cx)*(by-ay)) / denum;
    return 0<=r && r<=1 && 0<=s && s<=1;
}

如果段[AB]和[CD]相交,则应返回true。 您可以找到参考here

答案 1 :(得分:0)

您可以使用方法PointhitTesthitTestObjecthitTestPoint。我不知道Super Chafouin的回答是否有帮助,但我相信AS3中的代码看起来很不一样。

为了解释它们的含义,我将引用actionscript.org中的 Aaron Beall ,给出一个很好的解释:

  

hitTestObject 检查两个显示的边界框矩形   对象。它总是检查矩形与矩形。

     

hitTestPoint 针对显示对象检查点(x,y):    - 使用shapeFlag true,它会检查点与形状    - 使用shapeFlag false,它会检查point-vs-rectangle

     

BitmapData / hitTest 针对点,矩形或者检查位图   其他bitmapdata。使用bitmapdata-vs-bitmapdata检查意味着你   可以执行基于alpha通道的形状与形状检查。看这里:   http://www.mikechambers.com/blog/200...ion-detection/

     

(另外,不要挑剔,只是为了确保你理解,不是   hitTestObject或hitTestPoint被“触发” - 你必须手动   当你想要检查一些东西时打电话给他们。)

要求整个算法非常重要,这取决于你的应用程序。

有关更多示例和文档,请参阅 here here

我希望这会有所帮助!