03.球とAABBの当たり判定
8.球とAABBの当たり判定
このページでは、授業で扱った3種類の当たり判定を、何を比べればよいかという視点で整理します。
- 球 vs 球
- AABB vs AABB
- 球 vs AABB
Q34.球は何で表す?
球の当たり判定を表すために必要な情報を選んでください。
- A.中心座標と半径
- B.最小座標と最大座標だけ
- C.頂点を必ず8個
- D.回転角だけ
答え
A.中心座標と半径
球は中心 $C$ と半径 $r$ で表せます。
Q35.球同士が当たる条件は?
球Aの中心を $C_A$、半径を $r_A$、球Bの中心を $C_B$、半径を $r_B$ とします。衝突条件として正しいものを選んでください。
- A.中心間距離 $\le r_A+r_B$
- B.中心間距離 $\ge r_A+r_B$
- C.中心間距離 $=r_A-r_B$ のときだけ
- D.半径に関係なく中心が違えば衝突
答え
A
2つの中心の距離が、半径の和以下なら球同士は接触または重なっています。
Q36.数値で球同士を判定しよう
球Aの中心が $(0,0,0)$、半径が2、球Bの中心が $(3,4,0)$、半径が3です。2つの球は当たっていますか。
- A.当たっている
- B.当たっていない
答え
A.当たっている
中心間距離は $\sqrt{3^2+4^2}=5$、半径の和も $2+3=5$ なので、ちょうど接しています。
Q37.なぜ距離の2乗で比べる?
実装では、しばしば次のように平方根を取らずに判定します。
$$ |C_A-C_B|^2 \le (r_A+r_B)^2 $$
この方法を使う主な理由を選んでください。
- A.平方根を計算しなくても同じ大小関係を判定できるため
- B.半径が不要になるため
- C.球をAABBへ変換できるため
- D.座標を正規化できるため
答え
A
距離そのものが不要で「当たっているか」だけ知りたい場合、平方根を省けます。
9.AABB vs AABB
AABBは各軸に平行な箱で、最小座標 min と最大座標 max で表せます。
Q38.AABBを表す値を選ぼう
3DのAABBを表す基本情報として正しいものを選んでください。
- A.
min(x,y,z)とmax(x,y,z) - B.中心と半径
- C.Forwardベクトルだけ
- D.Yaw・Pitch・Rollだけ
答え
A
Q39.1軸でも離れていたら?
2つのAABBがX方向では完全に離れていますが、Y方向とZ方向では重なっています。衝突しているでしょうか。
- A.衝突している
- B.衝突していない
答え
B.衝突していない
AABB同士は、X・Y・Zのすべての軸で区間が重なっているときだけ衝突します。1軸でも離れていれば非衝突です。
Q40.数値でAABBを判定しよう
AABB Aを min=(0,0,0), max=(2,2,2)、AABB Bを min=(3,1,1), max=(4,2,2) とします。衝突していますか。
- A.衝突している
- B.衝突していない
答え
B.衝突していない
X方向で、Aの最大値2よりBの最小値3の方が大きいため、X軸で完全に離れています。
Q41.AABBの判定条件を選ぼう
X軸だけを考えます。AABB AとBがX方向で離れている条件として正しいものを選んでください。
- A.
A.max.x < B.min.xまたはB.max.x < A.min.x - B.
A.max.x > B.min.xなら必ず離れている - C.
A.min.x == B.min.xのときだけ離れている - D.X軸だけでは何も判定できない
答え
A
この「離れているか」の確認をX・Y・Zで行います。
10.球 vs AABB
球とAABBでは、まずAABB上で球の中心に最も近い点を求めます。その最近点を $Q$、球の中心を $C$ とすると、最後は $|C-Q|$ と半径を比較できます。
Q42.clamp は何をしている?
AABBのX範囲が $[0,4]$、球中心のX座標が $C_x=5$ です。clamp(C.x, 0, 4) の結果はいくつですか。
答え:______
答え
4
範囲より大きい値は最大値4に固定されます。
Q43.AABBの内側ならどうなる?
AABBのX範囲が $[0,4]$、球中心のX座標が $C_x=2$ です。clamp(C.x, 0, 4) の結果はいくつですか。
答え:______
答え
2
範囲内の値はそのまま返ります。この性質をX・Y・Zすべてに使うと、最近点を作れます。
Q44.3次元の最近点を求めよう
AABBを min=(0,0,0), max=(4,2,3)、球中心を $C=(5,3,-2)$ とします。各成分を clamp して得られる最近点 $Q$ を求めてください。
答え:$Q=(___,___,___)$
答え
$Q=(4,2,0)$
- X:5 → 4へclamp
- Y:3 → 2へclamp
- Z:-2 → 0へclamp
Q45.最近点から衝突を判定しよう
Q44の $C=(5,3,-2)$、$Q=(4,2,0)$ を使います。球の半径が $r=2$ のとき、衝突しているでしょうか。
- A.衝突している
- B.衝突していない
答え
B.衝突していない
$C-Q=(1,1,-2)$ なので距離の2乗は $1^2+1^2+(-2)^2=6$。半径の2乗は $2^2=4$ です。$6>4$ なので衝突していません。
Q46.球の中心がAABBの中にあると?
球の中心 $C$ がAABBの内部にある場合、clamp で求めた最近点 $Q$ はどうなりますか。
- A.$Q=C$ になる
- B.必ずAABBの角になる
- C.必ず原点になる
- D.最近点は求められない
答え
A.$Q=C$ になる
この場合 $|C-Q|^2=0$ なので、球はAABBと重なっていると判定できます。
Q47.処理の順番を並べよう
球 vs AABBの基本的な処理を、正しい順番に並べてください。
- A.$|C-Q|^2$ と $r^2$ を比較する
- B.各軸を
clampして最近点 $Q$ を求める - C.差ベクトル $C-Q$ を求める
- D.差ベクトルの長さの2乗を求める
答え:__ → __ → __ → __
答え
B → C → D → A
clamp → 最近点 → 差ベクトル → 距離² → 半径²と比較、という流れです。
No Comments