ある一点からの放射状に広がる円形の当たり判定を表現したいのですがどうしたらいいでしょうか?
障害物に衝突した場合、その後ろは判定させたくありません。
・A | ○B
例えば点Aに判定が無限に広がる爆弾があった時、壁|の向こう側にある円Bに判定させたくありません。
どういう方法が最適なのでしょうか?
①点Aから広がる複数の直線を爆発判定とする。→綺麗ではないし、距離やBの大きさによって安全地帯ができるためNG?
②安全地帯ができないぐらい敷き詰める→爆風の大きさによって線量が変わるためNG?
③点Aから広がる単純な円として円Bと判定して基準点A-B間に障害物がなかったらあたってる→自分より細い障害物で回避できそうなのでNG?
爆発の判定
Re: 爆発の判定
2Dか3Dかで難易度がまるで異なります。
まずはそこですね。
2Dでそういったことをしたければそんなに難しくないと思いますが、次に考えることは形の複雑さです。
障害物が円、凸多角形、線分といった簡単な図形であれば、判定の例を示せますが、
凹んだ部分を含む多角形を認める場合は、あらかじめそれらを凸多角形に分解してやる必要があると思います。
自分の思いつく限り、判定方法は次のようなものです。
前の回答者さんが示している通り、爆心から障害物をつなぐ2半直線のうち、障害物内のすべての点が2半直線の間に収まるような
もっとも間の角度が小さい2つの半直線を求めればいいでしょう。
今仮に爆心が各障害物の外部にあると仮定します
①障害物が線分の場合
単純に線分の2つの端と爆心を結べばいいでしょう
②障害物が円の場合
円の中心から2つの線分までの距離がちょうど半径になるという条件から方程式を解いて半直線の方向ベクトルを求めます
③障害物が多角形の場合
まず多角形の1頂点と爆心を結びます。そしてそのベクトルを90°回転させたベクトルを得ます
次に各頂点と爆心を結んだベクトルを正規化し、最初のベクトルと内積をとります。
内積が最も大きい頂点と、最も小さい頂点が求める2半直線上にある頂点です。
これは図の右下を見ていただければなんとなくと思います。
あとは単純に2半直線間の間に物体があるかどうかを判定すればよいでしょう。
(円なら中心が半直線の間にあり、かつそれらまでの距離が半径以上、多角形ならすべての頂点が2半直線間にあればよい)
爆風を考慮するなら、これらの条件に爆風を表す円の内側に入っているかを付け加えるだけです。
3Dで正確さを求めるならスラブなどを使うのでしょうけれど、すこし難しいかもしれません。
少なくとも高速でかつ正確に判定する方法は僕にはちょっと思いつきませんね
まずはそこですね。
2Dでそういったことをしたければそんなに難しくないと思いますが、次に考えることは形の複雑さです。
障害物が円、凸多角形、線分といった簡単な図形であれば、判定の例を示せますが、
凹んだ部分を含む多角形を認める場合は、あらかじめそれらを凸多角形に分解してやる必要があると思います。
自分の思いつく限り、判定方法は次のようなものです。
前の回答者さんが示している通り、爆心から障害物をつなぐ2半直線のうち、障害物内のすべての点が2半直線の間に収まるような
もっとも間の角度が小さい2つの半直線を求めればいいでしょう。
今仮に爆心が各障害物の外部にあると仮定します
①障害物が線分の場合
単純に線分の2つの端と爆心を結べばいいでしょう
②障害物が円の場合
円の中心から2つの線分までの距離がちょうど半径になるという条件から方程式を解いて半直線の方向ベクトルを求めます
③障害物が多角形の場合
まず多角形の1頂点と爆心を結びます。そしてそのベクトルを90°回転させたベクトルを得ます
次に各頂点と爆心を結んだベクトルを正規化し、最初のベクトルと内積をとります。
内積が最も大きい頂点と、最も小さい頂点が求める2半直線上にある頂点です。
これは図の右下を見ていただければなんとなくと思います。
あとは単純に2半直線間の間に物体があるかどうかを判定すればよいでしょう。
(円なら中心が半直線の間にあり、かつそれらまでの距離が半径以上、多角形ならすべての頂点が2半直線間にあればよい)
爆風を考慮するなら、これらの条件に爆風を表す円の内側に入っているかを付け加えるだけです。
3Dで正確さを求めるならスラブなどを使うのでしょうけれど、すこし難しいかもしれません。
少なくとも高速でかつ正確に判定する方法は僕にはちょっと思いつきませんね