ポイントがポリゴン内にあるかどうかを判断することに関する投稿を見てきましたが、その答えは漠然としていたり、抽象的だったり、複雑すぎたりします。そこで、私が何をする必要があるかについて具体的な質問をしようと思います。
非直線 (場合によっては閉じた多角形) を表す点のセットがあります。長方形の「ビュー」領域があります。線分 (またはポリゴンの境界線) がビュー領域を通過するかどうかをできるだけ効率的に判断する必要があります。
各ポイントを単純にテストして、ビュー領域内にあるかどうかを確認することはできません。実際には領域内に点がなくても、セグメントが領域を通過する可能性があります (つまり、線が領域を横切って描かれます)。
これが私が決定したいものの例です(赤は関数が一連のポイントに対してtrueを返す必要があることを意味し、青は関数がfalseを返す必要があることを意味します。私はアーティストではないため、例では直線と長方形を使用しています)。
私が説明できるようにしたいもう 1 つの条件 (ただし、メソッド/関数は別のものである可能性があります) は、多角形の境界が四角形の領域を通過するかどうかだけでなく、領域が多角形によって完全に囲まれているかどうかを判断することです。ここでのニュアンスは、最初に説明した状況で、境界線の描画のみに関心がある場合、メソッドは false を返す必要があるということです。しかし、ここで説明した状況でポリゴン領域を塗りつぶす必要がある場合は、関数が true を返す必要があります。現在、「ドーナツ」形状のポリゴンのテストについて心配する必要はありません (神に感謝します!)。
ニュアンスを示す例を次に示します (赤い四角形には、画面上の領域を通過する単一の頂点または境界セグメントがありませんが、それでも画面上と見なす必要があります)。
「線分またはポリゴンの境界が画面を通過または横たわっていますか?」私は解決策を考え出すことができることを知っています (おそらく効率的なものではありませんが)。より冗長ですが、条件は私には明らかです。しかし、2 つ目は「画面上のポリゴン領域は?」です。問題は少し難しいです。誰かがこれを行うための良い提案をしてくれることを願っています。そして、1 つのソリューションが他のソリューションの上に簡単に実装できる場合は、まあまあです。
いつものように、助けや提案を事前にありがとう。
PS私は線の交点を決定する機能を持っていますが、画面上の領域は常にプレーン[0、0、幅、高さ]であるため、各セグメントを画面上の領域の両側と比較するためにそれを使用するのはやり過ぎのようです矩形。何か近道はないのでしょうか?