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

PointhitTesthitTestObjectまたはの方法を使用できますhitTestPoint。Super Chafouin の回答が役立つかどうかはわかりませんが、AS3 ではコードがかなり異なって見えると思います。

それらが何を意味するのかを説明するために、 actionscript.orgからAaron Beallを引用して、適切な説明を提供します。

hitTestObjectは、2 つの表示オブジェクトの境界ボックスの四角形をチェックします。常に長方形と長方形をチェックします。

hitTestPointは、表示オブジェクトに対して点 (x,y) をチェックします。

BitmapData/ hitTestは、ポイント、四角形、またはその他のビットマップ データに対してビットマップをチェックします。bitmapdata-vs-bitmapdata のチェックを使用すると、アルファ チャネル ベースの形状と形状のチェックを実行できることを意味します。こちらをご覧ください: http://www.mikechambers.com/blog/200...ion-detection/

(また、細かいことを言うのではなく、理解していることを確認するために、hitTestObject も hitTestPoint も「トリガー」されません。何かを確認したい場合は、手動で呼び出す必要があります。)

アルゴリズム全体を要求することはかなりのことであり、アプリにも依存します。

その他の例とドキュメントについては、こちらこちらを参照してください

これが役立つことを願っています!

于 2012-06-22T09:13:32.263 に答える