02.行列・角度・視界判定
4.行列で変換をまとめよう

行列を使うと、平行移動・回転・拡大縮小などの変換を、同じ仕組みで扱ったり、複数の変換をまとめたりできます。2Dの回転では、授業で扱った $\cos\theta$ と $\sin\theta$ が回転行列の中に入ります。
$$ R=\begin{bmatrix} \cos\theta & -\sin\theta\ \sin\theta & \cos\theta \end{bmatrix} $$
Q16.単位行列の役割は?
単位行列を座標やベクトルに掛けたときの説明として正しいものを選んでください。
- A.座標が2倍になる
- B.座標は変化しない
- C.必ず原点へ移動する
- D.90度回転する
答え
B.座標は変化しない
単位行列は、数の掛け算における「1」のような役割を持ちます。
Q17.拡大縮小行列を読もう
2次元で次の行列を使います。
$$ S=\begin{bmatrix} 2 & 0\ 0 & 3 \end{bmatrix} $$
点 $P=(1,2)$ をこの行列で変換した結果を選んでください。
- A.$(2,6)$
- B.$(3,4)$
- C.$(2,3)$
- D.$(1,6)$
答え
A.$(2,6)$
X方向を2倍、Y方向を3倍する行列です。
Q18.なぜ同次座標を使う?
2Dなら3×3、3Dなら4×4の行列をよく使う大きな理由を選んでください。
- A.平行移動も行列の掛け算としてまとめて扱うため
- B.必ず計算を高速化できるため
- C.ベクトルの長さを1にするため
- D.色をRGBAで表すため
答え
A.平行移動も行列の掛け算としてまとめて扱うため
回転や拡大縮小だけでなく、平行移動まで同じ行列計算に含められます。
Q19.変換の順番は同じ結果になる?
「先に回転してから平行移動」と「先に平行移動してから回転」は、一般に同じ結果になるでしょうか。
- A.必ず同じ
- B.一般には異なる
答え
B.一般には異なる
行列の掛け算は順番が重要です。ゲームでモデルを配置するときは、どの順番で変換するかを意識する必要があります。
Q20.合成変換のメリットは?
複数の変換行列をあらかじめ掛け合わせて1つの行列にしておくメリットとして適切なものを選んでください。
- A.複数の変換を1回の行列変換として扱える
- B.掛ける順番を考えなくてよくなる
- C.どんな変換でも結果が同じになる
- D.座標系が不要になる
答え
A.複数の変換を1回の行列変換として扱える
ただし、合成するときの掛ける順番は重要です。
5.親子関係とローカル座標

キャラクターの腕、武器、車のタイヤなどでは、子オブジェクトを親に対する相対位置で持つと便利です。
Q21.ローカル座標とワールド座標
次の説明を対応させてください。
| 座標 | 説明 |
|---|---|
| ローカル座標 | ______ |
| ワールド座標 | ______ |
選択肢:
- 親や自分の基準から見た相対的な座標
- ゲーム世界全体の基準から見た座標
答え
- ローカル座標 → 親や自分の基準から見た相対的な座標
- ワールド座標 → ゲーム世界全体の基準から見た座標
Q22.親が動いたら子はどうなる?
親オブジェクトがX方向へ10移動し、子が親から見てローカル座標 $x=2$ にあるとします。回転や拡大縮小を考えない場合、子のワールド座標のXはいくつですか。
答え:______
答え
12
親の変換が子へ伝わるため、子のワールド位置も変化します。
Q23.親子関係が向いているものを選ぼう
親子・階層変換を使うのに向いている例をすべて選んでください。
- A.キャラクターの腕に持たせる剣
- B.車体に付いたタイヤ
- C.ボーンで動く3Dモデル
- D.まったく関係のない別ステージの敵
答え
A・B・C
「親が動けば子も一緒に動いてほしい」ものは階層構造と相性がよいです。
6.角度を求めて移動・旋回しよう

Q24.敵の方向角を求める関数は?
プレイヤーから敵までの差が $dx=x_E-x_P$、$dy=y_E-y_P$ と求まったとき、方向角を求めるのに適した関数を選んでください。
- A.
sqrt(dx * dx + dy * dy) - B.
atan2(dy, dx) - C.
abs(dx + dy) - D.
clamp(dx, -1, 1)
答え
B.atan2(dy, dx)
atan2 は符号も使うため、どの象限に敵がいるかを含めて方向角を求められます。これに対して、2つのベクトルのなす角そのものを求めたいときは、正規化したベクトルの内積から $\theta=\operatorname{acos}(A\cdot B)$ のように求められます。
Q25.差を先に求めよう
プレイヤーが $P=(2,3)$、敵が $E=(7,1)$ にいます。atan2 に渡す差 $dx,dy$ を求めてください。
- $dx=______$
- $dy=______$
答え
$dx=7-2=5$、$dy=1-3=-2$ です。
Q26.Forwardベクトルから移動量を求めよう

前方向を $F=(1,0)$、速さを $6\ \mathrm{unit/s}$、フレーム間隔を $\Delta t=0.5\ \mathrm{s}$ とします。位置更新 $P'=P+F\times Speed\times\Delta t$ で、このフレームに進む移動ベクトルを求めてください。
答え:$(___,___)$
答え
$F\times Speed\times\Delta t=(1,0)\times6\times0.5=(3,0)$
Q27.なぜDeltaTimeを掛ける?
移動量に $\Delta t$ を掛ける主な理由を選んでください。
- A.PCのフレームレートが違っても、1秒あたりの移動速度をそろえるため
- B.ベクトルを正規化するため
- C.角度を必ず0~360度にするため
- D.当たり判定をなくすため
答え
A
「1秒あたりの速度 × 経過時間」にすると、フレーム数ではなく時間で動きを決められます。
Q28.角速度にもDeltaTimeを使おう
角速度が $90^\circ/\mathrm{s}$、$\Delta t=0.25\ \mathrm{s}$ のとき、1フレームで回転させる角度はいくつですか。
答え:______度
答え
$90\times0.25=22.5^\circ$ です。
Q29.目標へ少しずつ旋回する
現在角度が $20^\circ$、目標角度が $100^\circ$、角速度が $60^\circ/\mathrm{s}$、$\Delta t=0.5\ \mathrm{s}$ です。目標へ向かって最大角速度で回すと、このフレーム後の角度はいくつですか。
- A.$30^\circ$
- B.$50^\circ$
- C.$80^\circ$
- D.$100^\circ$
答え
B.$50^\circ$
このフレームで回せる角度は $60\times0.5=30^\circ$ なので、$20^\circ+30^\circ=50^\circ$ です。
7.敵からプレイヤーが見えているか判定しよう

視界判定は、距離と向きを組み合わせると作れます。3Dでは必要に応じて、左右方向の角度(Yaw)と上下方向の角度(Pitch)に分けて考えることもできます。
Q30.視界判定に必要なものを選ぼう
敵がプレイヤーを発見できるか判定するために使えるものをすべて選んでください。
- A.敵からプレイヤーまでの距離
- B.敵の前方向
- C.敵からプレイヤーへの方向
- D.視野角
- E.プレイヤーのテクスチャ番号
答え
A・B・C・D
Q31.内積が大きいと何を意味する?
敵の前方向 $F$ と、敵からプレイヤーへの単位方向 $D$ の内積 $F\cdot D$ が 1に近いとき、プレイヤーはどこにいると考えられますか。
- A.敵のほぼ正面
- B.敵の真横
- C.敵のほぼ真後ろ
- D.距離が必ず0
答え
A.敵のほぼ正面
Q32.視野角の判定式を読もう
視野角を $\phi$ とし、$F$ と $D$ は単位ベクトルとします。プレイヤーが視野の内側にいる条件として適切なものを選んでください。
- A.$F\cdot D \ge \cos(\phi/2)$
- B.$F\cdot D \le -100$
- C.$|F|+|D|=0$
- D.$F\times D=0$ なら必ず視野内
答え
A.$F\cdot D \ge \cos(\phi/2)$
視野角 $\phi$ は左右合わせた角度なので、中心から片側は $\phi/2$ です。
Q33.距離判定を先にする理由は?
敵の索敵距離が10mなのに、プレイヤーが100m先にいることが分かりました。このとき角度判定を省略してよい理由として正しいものを選んでください。
- A.距離だけで「見えない」と確定できるため
- B.内積は100m以上では計算できないため
- C.外積しか使えなくなるため
- D.角度は必ず0度になるため
答え
A
まず安い判定で除外してから必要な計算へ進む、という考え方はゲーム処理でも重要です。
No Comments