回答編集履歴
1
ぶつかる判定について
answer
CHANGED
@@ -9,4 +9,14 @@
|
|
9
9
|
具体的には,カメラの位置を原点に,カメラと空間座標の原点を結ぶ直線方向をZ軸として,これに直交する平面上に互いに直交するようにX軸,Y軸を取ります.この座標系を「カメラ座標」とします.
|
10
10
|
そうすれば,カメラが見る画面としてのある平面上の点を,X,Y,Z軸上の単位ベクトルを用いて,カメラ座標での位置ベクトルとして表現できます.カメラからの直線は,この位置ベクトルの0以上の実数倍で表現できます.
|
11
11
|
こうして,「カメラからの直線上にある点」は,「空間座標でのカメラの位置ベクトル」+「カメラ座標での画面上の位置ベクトル」×「実数」で表現できます.このベクトルがぶつかる物体の中で,実数が最も0に近い物が求める物体ということになります.
|
12
|
-
ただし,今この2つのベクトルは違う座標系で考えたので,そのまま足すことはできません.カメラ座標における単位ベクトルが,空間座標の単位ベクトルを使ってどのように表現されるかを考え,変換する必要があります.そうすることで初めて,カメラからの直線を空間座標で表現することができます.
|
12
|
+
ただし,今この2つのベクトルは違う座標系で考えたので,そのまま足すことはできません.カメラ座標における単位ベクトルが,空間座標の単位ベクトルを使ってどのように表現されるかを考え,変換する必要があります.そうすることで初めて,カメラからの直線を空間座標で表現することができます.
|
13
|
+
|
14
|
+
「ぶつかる条件」は,物体表面の位置ベクトルと一致するカメラからの直線上の点を表す位置ベクトルが存在するか,という条件で判断します.
|
15
|
+
物体表面をあらわす位置ベクトルは,単位ベクトルと定数とパラメータ2個で表現することができます.例えば2辺がx軸の正の部分とy軸の正の部分に一致する一辺の長さ1の正方形の内部の点の位置ベクトル**t**は
|
16
|
+
**t**=a**x**+b**y**(**x**,**y**はx軸,y軸各方向の単位ベクトル,a,bは0以上1以下の実数)
|
17
|
+
と表現できます.a,bが先ほどのパラメータに該当します.
|
18
|
+
これと,カメラからの直線の表現に使った際の「実数」と合わせてパラメータが3つ登場しました.
|
19
|
+
2つの位置ベクトルが等しくなるような3つのパラメータが存在するかを,連立方程式を使って解きます.
|
20
|
+
連立方程式は行列の計算に置き換えられるので,そのための計算を用意すれば解くことができます.
|
21
|
+
この解が存在し,かつその解が物体表面にあるための条件を満たしていれば「ぶつかる」と判定できます.
|
22
|
+
条件は,先ほどの正方形の例なら,aかbのどっちかが0以上1以下という条件を満たしていなかったり(その表面を延長した表面にぶつかる),あるいはカメラ直線の実数の値がマイナスになる(カメラの後ろでぶつかる)ような場合は,ぶつかりません.
|