Digesting Duckに示されているファネルアルゴリズムを使用して、ファネルの検出がどのように機能するかわかりません。
誰かが私に方法を明確に説明するか、ファンネルを検出する別の方法を提案できますか?
Digesting Duckに示されているファネルアルゴリズムを使用して、ファネルの検出がどのように機能するかわかりません。
誰かが私に方法を明確に説明するか、ファンネルを検出する別の方法を提案できますか?
回答:
アルゴリズムは、先ほど見つけたパス、この場合は三角形のリストから始まります。
Mikkoのブログ投稿の最後にあるコードは、ポータルアレイを構成します。これは、パスのポリゴン間のラインセグメントを表すラインセグメントのリストです。これらは、スムージングパスが通過する必要がある「ポータル」です(または、「ポリゴンエッジの中間点をトレースしましょう」からのポリゴンエッジ)。ポータルリストの開始点と終了点は、開始点と目標点で縮退した線分で終わることに注意してください。
このポータルリストは、写真に黄色の点線のセグメントとして表示されます。
アルゴリズムは、広いじょうごで始まり、じょうご(AD)を締める限り、じょうごの側面をポータルサイドポイント(ラインセグメントの端点)に沿って繰り返し前方に移動させます。
内側に漏斗の縁を移動する必要があり、前方の各動きは、これを用いて確認することができ、この手段外積古い側及び潜在的な新しい側面を表すベクトル(P × Q以下の画像では、も参照triarea2
ミッコのコードで)。サイドへの前進がファネルを引き締めない場合、ポータルの現在の反復に対してそのサイドを更新しません(E)。
処理する必要があるもう1つのケースは、ファンネルがラインセグメントに縮退する場合です。これを説明するために、アルゴリズムは、外積の頂点と右側と左側のそれぞれの端点(R × Sでそれぞれ作られたベクトルの今回)を再度使用して、辺の1つが「間違った」側にあるかどうかをチェックします下の画像)。
この場合、ファンネル頂点からのベクトルと正しい側端点が平滑化されたパス(上記の画像のR)に追加され、アルゴリズムはその端点を新しい頂点(FG)として再起動します。ただし、もちろん、それが目標点である場合。