スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

3D数学のメモ

3Dでよく使う数学の知識をメモってみた
誰かの助けになりますよ~に!

座標系で混乱したら
親指
人差し指が
中指
を思い出す
これも忘れたら
短い指から順にXYZと覚えておけばOK

回転方向は右ねじの法則と同じで
電流=軸
磁界=回転方向
要するに親指を軸の正方向に向けながら軸を掴んで4本の指の方向に回転する
右手系座標のときは右手で握り、左手系の場合は左手で行う

~内積~
ふたつのベクトルの角度を表せる
単位ベクトルを利用することで仕事量や角度を便利に扱える

a・b = |a||b|cosθ
θ = acos( a・b) / |a||b|

a・b>0  ならば 0<=θ<90
a・b==0 ならば θ==90
a・b<0  ならば 90<θ<=180

a|| = (a・b) * b / |b|^2
a⊥ = a - a||



~外積~
二つのベクトルに垂直なベクトルを求められる
a×bの垂直なベクトルの向きを知るには
ベクトルaの矢印の先にベクトルbを繋げてみてどっちに回っているかを確認する
その方向に握った4本指を合わせてみて親指が向いた方向が軸の向きになる
座標系が左手系なら左手で 右手系なら右手で行うこと
よって非可換
a×b = -(b×a)

外積の大きさは二つのベクトルの成す角度に関係する(2つのベクトルで作成した平行四辺形の面積になる)
|a×b| = |a||b|sinθ



~行列式~
3x3を三つのベクトルと考えると行列式はその三重積といえる
三重積=a・b×c(もちろん外積からじゃないと計算できない)
符号が負ならオブジェクトがひっくり返ったことを表し(リフレクション行列を含む)0の場合は投影行列を含んでいることを示す
3Dにおける行列式の値は基底ベクトルを三辺とした平行六面体の体積と等しくなるらしい
使うかボケって感じ


~逆行列の短縮~
直行行列の転置行列(行と列を入れ替えるやつ)は逆行列となる
Mт = M-1
よって計算を短縮できるのだが 直行行列かどうか調べるには逆行列を求めるのと同じくらいのコストがかかる
要するに事前に直行と分かっていない時は上記の特性を使うべきではない
直行ベクトルの定義は自身と自身の転置行列との積が恒等行列(Matrix.Identity)であることだが
MMт = I
わかりにくいので突き詰めると
基底ベクトルが全部「単位ベクトル」であり「すべて直行」していること
である



~おまけ~
浮動少数の罠
行列クリープが累積して直行ベクトルが微妙に崩れることがある
この崩れを再構築するアルゴリズムとしてグラム・シュミットの直行化法というものがある
やり方は数学書かWEBで!

4x4Matrix。4次元?!
3次元まではXYZで想像がつく
3Dプログラムも4次元目を利用することになったのだが4つ目は「時間」などではない
3x3行列では平行移動ができないためにXYZにWを追加して仮想的な平面との関係を築いてつじつまを合わせる
3次元でも可能だった「せん断行列」を応用して「平行移動」を可能にしてやったわけだ




3Dゲーム製作って今更だけど結構数学の知識いるみたい・・・(涙)
ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。