2009-05-27 11 views
2

これをコード化する方法について私の頭を折り返すのに問題があり、助けていただければ幸いです。スナップからエッジ効果へのガイダンス

alt text http://agutie.homestead.com/FiLEs/triangle_square/triangle_square_03.gif

上の写真は、私はすぐにGoogleで何かですが、まともな例を示しています。四角形と三角形をユーザーが動かすことができるとします。ユーザーがABC三角形の「近く」にあるBGFC四角形をドラッグ&ドロップすると、三角形のエッジに合わせて四角形を自動的にスナップ/移動したいと思います。頂点は一致する必要はありません(そして、スナップはそれほど制限的ではありません)。私は四角形を移動して、最も近い辺が三角形の最も近い辺になるようにします。

すべての座標/頂点/アングルへのアクセスが許可されている場合、このスナップからエッジ効果を達成するのに合理的に簡単な方法はありますか?

例が複雑すぎる場合、同じ状況ですべての90度の角度の単純な2つの長方形はどうでしょうか?ある矩形を別の矩形の近くにドラッグし、その矩形を自動的に他の辺の端にスナップします。

私は、これを取り除く数学的な方法があると仮定しています。正しい方向へのプッシュを考えれば、これを研究して嬉しいです。ご協力いただきありがとうございます!

答えて

3

alt text http://img529.imageshack.us/img529/7607/trianglesquare01.gif

最初の画像は、三角形や四角形を示しています。三角形の辺は線l(1)に続き、四角形の辺は別の線l(2)に続く。

ここで、線の間隔を特定する必要があります。それをdと呼ぶことができます。この値は、正方形を移動するかどうかを決定します。あなたの質問で言及したように、私たちはすべての座標とすべての角度を知っています。つまり、線の方程式も知られています。

dを知っていると仮定します。変位(dx、dy)を計算します。次の画像は、第1画像の拡大部分を示している。

alt text http://img529.imageshack.us/img529/161/trianglesquare02v.gif

私たちは、私たちが持っている三角形の角度aを知っている:

dx = d * sin a 
dy = d * cos a 

をあなたが今知っておく必要があるのは、2本のparallell線の間の距離dを計算する方法です。私はこれをあなたのための運動として残します。

The Perpendicular Distance between two Parallel Lines

ほら:ここでは、始めるためのリンクです!

編集

あなたは私のl337フォトショップスキルを失礼する必要があります。しかし、彼らが十分に説明することを願っています

関連する問題