はじめに

CG 数学で学習すること

CG で使われている数学の範囲は非常に広いですが、 ここでは CG のプログラミングや Maya の MEL で必要なものに焦点をしぼって解説して行きます。

なぜ数学をまなぶのか

みなさんは、CG で絵やアニメーションを作りたいと思って学校に入ったはずなのに、 「どうして数学を勉強する必要があるの?」と思っていませんか。

なぜ数学を学ぶ必要があるのでしょうか。
なぜなら、CG (コンピュータグラフィクス)の制作に数学の知識が直接・間接に役に立つからです。

最近は 2D・3D の CG ソフトの種類が増えて、 個人が CG を製作するのに充分な機能を持っています。 インターフェースも GUI (グラフィクス・ユーザー・インターフェース)によって、 マウスの操作だけでもある程度のものを作ることが可能になりました。
しかし、モデリングやアニメーションなどにおいて、 少しでも高度なことをやろうとするとプログラミングが必要になる場合があります。 (具体的にいうと Maya のエクスプレッションや MEL などです) その時に数学の知識が必要になります。
それ以外にも、CG の原理を理解するときに必要です。 そして、数学の考え方はプログラミングや CG を制作する上でもそのまま活用することができます。

数学の考え方

数学の問題を考える場合には、以下のような考え方が必要です。

コンピュータと数値

そもそも、コンピュータは計算をするために作られた機械です。
コンピュータでは 0 と 1 という 2 種類の数字による 2 進数を使ってあらゆる処理をおこないます。
計算はもちろん、文字、画像や音声などのデータを処理したり覚えたりするのも、 すべて 0 と 1 によっておこなっています。
なぜ、0 と 1 なのでしょうか。
たとえば、 123 + 345 という計算をおこなう場合には、 コンピュータの内部では 1111011 + 101011001 という 2 進数に変換されて計算がおこなわれます。
複雑なパターンを見分けるのが得意な人間にとっては、 123 や 345 という 10 進法の数値のほうが計算しやすいのですが、 単純な計算を高速におこなうのが得意なコンピュータにとっては 0 と 1 しかあつかわない 2 進数のほうが計算しやすいのです。

コンピュータの実数

コンピュータで扱える数値には整数と実数の 2 種類があります。
コンピュータでは前述のように、 2 進数が計算の基本ですが、 0.5 や -1.23 のような実数の計算には CPU の中の別の回路(FPU)が使われます。
つまり、 1 + 2 と 1.0 + 2.0 では違う方法で計算されています。
CG 制作やプログラミングを行う時に覚えておくべきことは、 整数(int)と実数(float, double)では同じ計算でも計算結果が違ってくることがあるということです。 (コンピュータの計算精度 参照)

コンピュータの計算精度

コンピュータはいいかげんである

コンピュータは計算を速く正確に行う機械だというイメージがありますが、 実際は不正確な計算しかできません。 特に大きな数値や小さな数値の計算には注意が必要です。

計算例

以下の例では C 言語で作成したプログラムによって 計算結果を小数点以下 10 桁まで表示しています。

0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 = 1.0000001192
0.1 を 10 回加算した結果
0.01 + 0.01 + ... = 0.9999993443
0.01 を 100 回加算した結果
0.001 + 0.001 + ... = 0.9999907017
0.001 を 1000 回加算した結果
0.0001 + 0.0001 + ... = 1.0000535250
0.0001 を 10000 回加算した結果
0.00001 + 0.00001 + ... = 1.0009901524
0.00001 を 100000 回加算した結果
1.0 / 3.0 = 0.3333333433
1.0 を 3.0 で割り算した結果

コンピュータが扱える数の範囲は決まっています。 その範囲を超える計算をしようとすると結果がおかしくなります。 現在、よく使われているパソコン(32bit)で使用できる整数の範囲は -2147483648 から 2147483647 までなので、以下のような計算結果が出てしまいます。

2147483647 + 1 = -2147483648
計算結果がいきなりマイナスになります。
-2147483648 - 1 = 2147483647
逆に計算結果がプラスになってしまいます。

参考



Home | Contents
Mail