1

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

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

任何人都可以给我一个线索?

谢谢

4

2 回答 2

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。你可以在这里找到参考

于 2012-06-22T08:21:01.277 回答
0

您可以使用方法PointhitTest或。我不知道 Super Chafouin 的回答是否有帮助,但我相信代码在 AS3 中看起来完全不同。hitTestObjecthitTestPoint

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

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

hitTestPoint针对显示对象检查一个点 (x,y): - shapeFlag true 它检查 point-vs-shape - shapeFlag false 它检查 point-vs-rectangle

BitmapData/ hitTest根据点、矩形或其他位图数据检查位图。使用 bitmapdata-vs-bitmapdata 检查意味着您可以执行基于 alpha 通道的 shape-vs-shape 检查。见这里: http: //www.mikechambers.com/blog/200...ion-detection/

(另外,不要吹毛求疵,只是为了确保你理解,hitTestObject 或 hitTestPoint 都不是“触发的”——当你想检查某些东西时,你必须手动调用它们。)

要求一个完整的算法是很重要的,它也取决于你的应用程序。

有关更多示例和文档,请参见此处此处

我希望这个能帮上忙!

于 2012-06-22T09:13:32.263 回答