1

(凸でない可能性がある) 多角形と四角形を交差させるアルゴリズムが必要です。長方形は xy 平面に平行になりますが、多角形は任意の向きにすることができます。

さらに、真/偽の結果だけでなく、多角形が長方形と交差する正確な点も必要なので、多角形が長方形と重なる場所に線を引くことができます。非凸多角形の場合、これにより 2 つ以上の線が交差する可能性があります。

これは、一連のポリゴンをスライスし、形状が Z 値で指定された「平面」と交差する 2D の「カット」を作成できるセクション カット モジュール用です。

私は Java で開発しているので、Java3(2)D に役立つ組み込みメソッドがあれば、それが理想的です。

正しい方向へのヘルプ/ポインタは大歓迎です!

ここに写真があります...交差の結果として赤い線が欲しいです: 代替テキスト

4

1 に答える 1

0

これにより、任意のポリゴンについて、交差するすべてのセグメントが検出されます。

ポリゴンをエッジAB、BC、CDなどの順序付けられたコレクションと見なします。ここで、各エッジの最初のポイントから2番目のポイントへの「方向」は「時計回り」です。つまり、ポイントAを見ると、時計回りに移動するとポイントBが次のポイントになります。

この方法は、平面と交差するポリゴンのエッジを見つけてから、時計回りに移動して、平面の元の側面に戻る次のセグメントを見つけることです。これらのセグメントが平面と交差する2つのポイントは、交差するセグメントの端点を形成します。これは、すべてのポリゴンのエッジがチェックされるまで繰り返されます。

ポリゴンが凹面の場合、必ずしもすべてのセグメントがポリゴン内にあるとは限らないことに注意してください。

   let P be any point on the polygon.

   TOP:
   while (P has not been checked)

       mark P as having been checked.

       let f be the point following P, clockwise.

       if (P and f are on opposite sides of the plane) then

          Continuing from f clockwise, find the next point Y that is on
              the same side of the plane as P.
          Let z be the point counter-clockwise from Y.
              (note - Sometimes z and f are the same point.)

          let S1 be the point where P,f intersects the plane
          let S2 be the point where Y,z intersects the plane

          if (segment (S1,S2) is inside the polygon)
              add (S1,S2) to a 'valid' list.
              let P = Y
          else
              let P = f
          endif    
       else
          let P = f
       endif
   endwhile       

このアルゴリズムはあなたがそれに対して支払ったものの価値があります。:-)

于 2010-10-17T04:18:16.100 に答える