• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:最小包含円)

最小包含円を求めるプログラムの最適解とは?

このQ&Aのポイント
  • 最小包含円を求めるプログラムを作成していますが、数学的な厳密解ではなくあいまいな最適解を求めたいです。
  • 現在は最大距離になる2点を直径とし、その内側に点群がすべてある場合に採用しています。
  • さらに、外側に点群がある場合は3点で球を定義し、再び内側の点群がすべてあるか確認します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.3

3度目です。以下のSiteをご覧下さい。非常にシンプルで効果的なアルゴリムです。私の案は撤回します。 1)BoundingBoxを作る(=x,y,z最大最小値) 2)BoundingBoxに内接する球を求め、これを初期球とする。 3)全点なめ、 3a)iー点がこの球に入っていたらOK。 3b)iー点がこの球に入っていなかったら、このi-点を通り、反対側が元の球を通るように、新球を定める。(容易) だけで完成です。

参考URL:
http://www.3dspot.com/rtnews/rtnews7b.html

その他の回答 (4)

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.5

seianさんの指摘される通り、「Boxの一番長い辺の1/2を半径とする球でいい」です。失礼しました。 書いた後、コンビニで買い物している最中に「内接」という表現が数学的に正確でないことに気が付いたのですが、「まあ、分かってくれるだろう」と妥協してしまいました。

selju
質問者

お礼

返事おそくなって申し訳ございません。 ametsuchiさん、seianさん、早速の回答ありがとうございます。 おかげさまで、誤魔化していた部分が、ようやく確かな答えとして結果がでるようになりました。 CADを経験されている方のアドバイスがあると、非常に助かります。 まだ幾つか誤魔化してCADをカスタマイズした部分があるので、また、よろしくお願いします。 ありがとうございました。

  • seian
  • ベストアンサー率50% (16/32)
回答No.4

ametsuchiさん > 2)BoundingBoxに内接する球を求め、これを初期球とする。 細かいようですがBoundingBoxは一般には直方体になるわけで、 初期球としてはこのBoxに内接する球ではなく、このBoxの中心を中心とし、 このBoxの一番長い辺の1/2を半径とする球でいいようにも思えるのですが 如何なものでしょう。

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.2

先程の文章、「絞る」で切れてました。要は、計算時間を食わない範囲で、球の半径を「小さくする」ことも考えるべきではないかということです。 私も職業としてCADには20年程関わっていますが、生憎BoundingBoxしか使っていません。CGの世界では計算時間のかかるRayTracingで、No.1のような「BoundingSphere」が提案され、高速化に寄与しています。 下記のアルゴリズムを追うのがメンドイので、下記アルゴリズムとは別に自分なりの方針を掲げると、 1)BoundingBox作成 2)BoundingBoxに外接する、BoundingSphere作成(これが上限) 3)BoundingBoxに内接する、Sphere作成(これが下限) 4)半径だけでなく、中心も動かして、反復計算させる。(上限・下限で挟み撃ち)

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.1

大変失礼ですが、あまりエレガントな解法とは思えません。なぜなら、 1)「最大距離になる2点」を探すというのは、1/2*n^2回に比例する比較が必要。 2)最小の球とは限らないのではないか。常に大きくしているだけ。「絞る」 下記にBoundingSphereに関するアルゴリズムがあります。中は見てません。

参考URL:
http://www.acm.org/tog/resources/RTNews/html/rtnews8b.html

関連するQ&A