[数学]
数学
OpenGLや機械学習関連でやらないとわからないのでメモ書き
課題
2点間の距離
- ある2点の座標を求める
- center(0, 0, 0) と camera(0, 0 (center.yと同じ), Z) と
- centerとcameraの距離 forcalLength = 5f が決まっている
- forcalLengthが可変であってもcamera.zを求めたい
- 二点間の距離を求める公式(2次元、3次元) から
- (x1,y1,z1)と(x2,y2,z2)間の距離は
- \( \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} \)
- x座標とy座標は2点とも同じことを考慮すると
- \( \sqrt{(z_1-z_2)^2} = focalLength \)
- center.z = 0 で決まっているので
- \( \sqrt{(0-z_2)^2} = focalLength \)
- \( (0-z_2)^2 = focalLength^2 \)
- \( z_2 = -focalLength \)
図にしてみた
マウスを横に動かしたときの回転する角度
- 画面中のマウスカーソルを左右に動かした際、その左右の動きの距離をxposDelta
- 視点(カメラ)から対象の位置の距離をfocalLengthとしたとき
- 動かした角度はいくつになるか?
\( theta = tan^{-1} ( xposDelta / focalLength ) \)
- 直角三角形 - 高精度計算サイト から
- 角度 = アークタンジェント ( z / y ) になる
- \( tan^{-1} (X) \) という表記は初めて見たが 逆三角関数 というやつらしい
- ここで、角度だけしか出してないのはカメラの座標をrotateY(=Y軸中心に回転)させればよいからである
マウスを縦に動かしたときの回転する角度とカメラの座標
- 画面中のマウスカーソルを上下に動かした際、その上下の動きの距離をyposDelta
- 視点(カメラ)から対象の位置の距離をfocalLengthとしたとき
- 動かした角度とカメラの座標はどうなるか?
- よく考えたら向き以外は横の場合と同じで、角度を求めてrotateX, rotateZすれば良さそう
axis_open_gl2.png
distance_of_two_pos.png
mouse_carsol_and_theta.png