2次元の(必ずしも凸ではない)ポリゴンの方向付けされたバウンディングボックス(obb)ツリーを構築するコードを書いています。
これまでのところ、凸包を見つけ、船体に回転キャリパー法を使用することで、ポリゴンの面積が最小のobbを見つけることができました。
下の写真はその一例です。赤い線と赤い点が付いた黄色で塗りつぶされたポリゴンは、元のポリゴンを表しています。凸包は青色で黒い線で示され、obbは紫色の線で示されています。
(編集)要求に応じて:インタラクティブバージョン-Chromeでのみテスト済み
ここで、コードを拡張して、OBBだけでなく、OBBツリーを構築したいと思います。これは、ポリゴンをカットし、ポリゴンの半分ごとに新しいOBBを計算する必要があることを意味します。
これを行うための推奨される方法は、OBBを半分にカットしてポリゴンをカットすることのようです。しかし、いずれかの軸の中央でobbをカットすると、ポリゴン上に新しい頂点を作成する必要があるように見えます(そうでない場合、そのパーティションの凸包を見つけるにはどうすればよいですか?)。
- このような頂点の追加を回避する方法はありますか?
- そうでない場合、(実装の難しさに関して)それを行う最も簡単な方法は何ですか?最もランタイム効率の良い方法は何ですか?