【问题标题】:Find crossing lines in drawing engine在绘图引擎中查找交叉线
【发布时间】:2012-06-22 07:18:57
【问题描述】:

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

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

谁能给我一个线索?

谢谢

【问题讨论】:

  • 我感觉所说的算法不会是什么“小”:(

标签: algorithm actionscript-3


【解决方案1】:

这是一个 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

【讨论】:

    【解决方案2】:

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

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

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

    hitTestPoint 对照显示对象检查点 (x,y): - 如果 shapeFlag 为真,它会检查点与形状 - 使用 shapeFlag false 它检查点对矩形

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

    (另外,不要吹毛求疵,只是为了确保您理解,既不 hitTestObject 或 hitTestPoint 被“触发”——你必须手动 当你想检查什么时打电话给他们。)

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

    查看更多示例和文档herehere

    我希望这会有所帮助!

    【讨论】:

    • 检查线/线冲突是完美的。我最终使用了我在keith-hair.net/blog/2008/08/04/… 和 Super Chafouins 代码中找到的代码的修改版本。再次欢呼,再次感谢!
    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2017-01-24
    • 2012-09-13
    相关资源
    最近更新 更多