水曜日 企業連携実習(花井先生の授業)
 →2時間目からなので、注意

冬休み中の実習室利用
 →資料(12月25日~28日、1月5日)

今日の授業 3D数学

3Dのゲーム制作で使う数学の知識
 位置、ベクトル、行列

position(位置)
p(x, y, z)
p1(x1,y1,z1)
p2(x2,y2,z2)
v(vx,vy,vz)

ベクトル(vector)
  終点-始点
v = p2-p1
v(vx,vy,vz)=(x2-x1, y2-y1, z2-z1)
ベクトルの長さ
|v| = |p2-p1| 2点間の距離
単位ベクトル → ある向きで、長さが1のベクトル
単位ベクトル化 → 正規ベクトル化、正規化
v/|v| = (vx/|v|, vy/|v|, vz/|v|)


行列(matrix)
3D 3x3
|vx1, vy1, vz1|
|vx2, vy2, vz2|
|vx3, vy3, vz3|

2D 2x2
|a b||x|   |ax+by|
|c d||y| = |cx+dy|

v(x1,y1) 2倍したベクトル (ベクトルを2倍する変換)
2・v = 2(x1, y1) = (2x1,2y1)

|a b||x1|   |ax1+by1|   |2x1|
|c d||y1| = |cx1+dy1| = |2y1| 

|2 0||x1|   |2x1+0y1|
|0 2||y1| = |0x1+2y1|

Sを拡大縮小率として
|SX  0| はスケール変換行列
| 0 SY|

|SX  0  0|
| 0 SY  0|
| 0  0 SX|

回転
2次元回転
|x' = cos(t)*x1 - sin(t)*y1
|y' = sin(t)*x1 + cos(t)*y1

|cos(t) -sin(t)||x1|  |cos(t)*x1 - sin(t)*y1|
|sin(t)  cos(t)||y1| =|sin(t)*x1 + cos(t)*y1|

ある角度t(rad)だけ、点(x,y)を回転する行列
|cos(t) -sin(t)|
|sin(t)  cos(t)|

3次元の回転行列
①x軸回転(yz平面上の回転)
|  1   0       0   ||x1| | x1*1 + y1*0      + z1*0     |  |       x1          |
|  0 cos(t) -sin(t)||y1|=| x1*0 + y1*cos(t) - z1*sin(t)|= |y1*cos(t)-z1*sin(t)|
|  0 sin(t)  cos(t)||z1| | x1*0 + y1*sin(t) + z1*cos(t)|  |y1*sin(t)+z1*cos(t)|

②y軸回転(xz平面上の回転)
| cos(t)  0  sin(t)|
|   0     1    0   |
| -sin(t) 0  cos(t)|

③z軸回転
|cos(t) -sin(t) 0|
|sin(t)  cos(t) 0|
|  0       0    1|


平行移動
|x'| |x1 + tx|
|y'|=|y1 + ty|
vd(x',y') = v(x1,y1) + t(tx,ty)

同次座標変換

|x'| |1 0 tx||x1| |1*x1+0*y1 + tx| |x1+tx|
|y'|=|0 1 ty||y1|=|0*x1+1*y1 + ty|=|y1+tx|
|1'| |0 0  1||1 | |0*x1+0*y1 + 1 | |  1  |

「2次元も3次元も座標変換=変換行列を、変換したい順に掛ける」