2007年06月20日 10:30 [Edit]

グラフィックに役立つ数学的事実

del.icio.us経由。

単なる翻訳ではなく、もう少し使いやすくしてみた。


定数

実際にJavaScriptに計算させています。

√2
= sqrt(2) =
Φ
= (sqrt(5) + 1)/2 =
黄金比の長い方。短い方は小文字のφをあてることが多い。φ = 1/Φ = Φ - 1 =
√3
= sqrt(3) =
e
= exp(1) =
π
= 4 * atan2(1,1) =
ファイゲンバウム定数
詳しくはを参照のこと。値もそちらを(原文にはδしか出て来ない)

(プラトンの)正多面体

φとΦの値は上記参照。

正四面体 (Tetrahedron)
( 1, 1, 1), ( 1, -1, -1), ( -1, 1, -1), ( -1, -1, 1)
正六面体 (立方体;Cube)
(±1,±1,±1)
正八面体 (Octahedron)
(±1, 0, 0), ( 0,±1, 0), ( 0, 0,±1)
正十二面体 (Dodecahedron)
( 0,±φ,±Φ), (±Φ, 0,±φ), (±φ,±Φ, 0), (±1,±1,±1)
正二十面体 (Icosahedron)
( 0,±Φ,±1), (±1, 0,±Φ), (±Φ,±1, 0)
以下正多面体ではないのだけど、原文に載っていたので。
立方八面体 (Cuboctahedron;原文のCubeoctahedronはtypo)
( 0,±1,±1), (±1, 0,±1), (±1,±1, 0)
二十・十二面体 (Icosidodecahedron)
(±2, 0, 0), ( 0,±2, 0), ( 0, 0,±2), (±Φ,±φ,±1), (±1,±Φ,±φ), (±φ,±1,±Φ)

三角関数

余弦定理

三角形ABCにおいて、c = AB, a = BC, b = CAのとき、

c*c = a*a + b*b - 2*a*b*cos(C)

角の加減公式

sin(a + b) = sin(a) * cos(b) + cos(a) * sin(b)
sin(a - b) = sin(a) * cos(b) - cos(a) * sin(b)
cos(a + b) = cos(a) * cos(b) - sin(a) * sin(b)
cos(a - b) = cos(a) * cos(b) + sin(a) * sin(b)

tanに関する公式は略。tan(theta) = sin(theta)/cos(theta)を覚えておけば間に合うので。

半角の公式

sin(a) ** 2 = (1 - cos(2*a))/2
cos(a) ** 2 = (1 + cos(2*a))/2

主な角度における値

オイラーの贈り物(追加)

実はこれだけ覚えておけば、上の公式は全部導出できる。

exp(i * theta) = cos(theta) + i * sin(theta)

回転行列

これはたしかにグラフィックでめっさ使う。

X座標に対する回転

   [ P.x' ]   [  1    0       0    ]   [ P.x ]
   [ P.y' ] = [  0  cos(t) -sin(t) ] * [ P.y ]
   [ P.z' ]   [  0  sin(t)  cos(t) ]   [ P.z ]

Y座標に対する回転

   [ P.x' ]   [  cos(t)  0  sin(t) ]   [ P.x ]
   [ P.y' ] = [    0     1    0    ] * [ P.y ]
   [ P.z' ]   [ -sin(t)  0  cos(t) ]   [ P.z ]

Z座標に対する回転

   [ P.x' ]   [  cos(t) -sin(t)  0 ]   [ P.x ]
   [ P.y' ] = [  sin(t)  cos(t)  0 ] * [ P.y ]
   [ P.z' ]   [    0       0     1 ]   [ P.z ]

単位ベクトル[x, y, z]に対する回転

   [ P.x' ]   [ xx*c_1+c   xy*c_1-zs  xz*c_1+ys ]   [ P.x ]
   [ P.y' ] = [ xy*c_1+zs  yy*c_1+c   yz*c_1-xs ] * [ P.y ]
   [ P.z' ]   [ xz*c_1-ys  yz*c_1+xs  zz*c_1+c  ]   [ P.z ]

線と線の交点

線と面の交点

線と三角形の交点

略:-)

原文のそれは現場ではちょっと使いづらい。代わりに奥村先生の「Cによるアルゴリズム事典」がお薦め。

Dan the Math (ab)?user


この記事へのトラックバックURL

この記事へのトラックバック
以前Matrix3Dの勉強用に作ったもの。4,6,8,12,14,20,30面体にクリックするたびに変わる。 隠面消去とフラットシェーディングに対応。マウスの位置が光源。 多面体座標はこちらを参考にした...
[Study]多面体【水玉製作所】at 2009年05月21日 22:05
この記事へのコメント
黄金比の計算が間違っていますよ (^^)
Posted by メイ・ビート・モロー at 2007年06月20日 22:04