![]()
野中文雄の応用力に差をつけるActionScript数学講座
※本講座は大幅に講座内容を変更し、新講座「 野中文雄の数学的思考で取り組むActionScript中級講座 」としてリニューアルいたしました。また、Flash CS4/Flash Player 10より加わった3D 表現を重点的に学習する講座「 野中文雄のFlash CS4 3D講座 」も追加されました。詳しくは新講座情報をご覧ください。
スクリプトでアニメーションを作成しようとすると、数学や物理学の知識がよく必要となります。そういうとき、すぐに公式を探そうとする人が少なくありません。けれど、都合のいい公式がいつも見つかるとはかぎりません。また、単純に公式を適用しただけでは、意図した動作ができないこともあります。
たとえば、アニメーターが描く動きというのは、もちろん現実の世界の観察にもとづきます。しかし、厳密にその動きを再現するとはかぎらず、ときにはデフォルメすることにより「らしさ」を表現することもあります。つまり、動きを再現するうえで重要な部分と、そうでない部分を見極めて描写する必要があるのです。数学や物理学の方程式も同じことです。単純に公式を覚えて適用するだけでなく、その原理や考え方を理解して、応用しなければなりません。
本講座は、アニメーションを扱ううえで重要な座標空間に関わる、数学の基本的な項目を学習します。とくに後半は、高校文系の数学の知識では理解しにくい、行列とMatrixおよびMatrix3Dクラスについて解説します。
※講座内容の応用例です。講座では、立方体1面の扱いを中心として、スクリプトの仕組みと考え方を解説し作成いたします。
スクリプティングよりも、数学的な説明が中心です。スクリプトは、ActionScript 3.0を使い、イベントリスナーの扱いを理解していることが前提となります。
数学の知識については、高校文系程度で結構です。スクリプトはActionScript 3.0を使い、イベントリスナーの扱いや条件判定を理解していることが前提となります。
受講者全員に野中氏の書籍『 ActionScript 3.0プロフェッショナルガイド 』をテキストとしてプレゼントいたします。
講座レベル![]()
■カリキュラム概要
三平方(ピタゴラス)の定理
- 三平方の定理とは
- 三平方の定理の証明
三角関数
- cos(コサイン)とsin(サイン)
- 円と楕円の方程式
- ラジアン
- tan(タンジェント)とtan-1(アークタンジェント)
- 座標軸の方向について
ベクトル
- ベクトルとスカラー
- ベクトルの絶対値とスカラー倍および単位ベクトル
- ベクトルの和と差
- ベクトルの内積
行列と座標変換
- 行列とは
- 行列のスカラー倍と足し算・引き算
- 行列の掛け算
- 変換行列とMatrixクラス
- Matrix3Dクラスにおける変換行列の扱い
*カリキュラムの進度および内容は、受講者全員の理解度・習得度によって変更される場合があります。
- 使用アプリケーション
- Adobe Flash CS4
- 講師
- 野中文雄
- テキスト
- 『 ActionScript 3.0プロフェッショナルガイド 』
- 定員
- 6名
- 対象
- ActionScript 3.0のイベントリスナーの扱いを学習された方。
「 林拓也のActionScript 3.0入門講座(後半) 」を受講された方。 - 料金
- 29,800円(税込み)
■受講対象レベルチェック問題
*全問正解が受講の必須条件ではなく、受講対象レベルの具体的な目安とお考えください。
問1:
円の面積を求める関数xGetCircleArea()を定義してください。関数xGetCircleArea()に円の半径を渡すと、円の面積が返されます。たとえば、つぎのとおりです。
trace(xGetCircleArea(10));
// 出力: 314.1592653589793
問2:
上記「問 1」で作成した関数xGetCircleArea()に、仕様を追加します。円の半径は正数でなければなりませんので、引数として負の数を渡したときは、特別な値NaNを返すようにしてください。たとえば、つぎのような結果になります。
trace(xGetCircleArea(-10));
// 出力: NaN
問3:
DisplayObject.addEventListener()メソッドを使って、MovieClipインスタンスを回転するフレームアクションを作成してください。回転は時計回りで、速度は毎フレーム10度とします。スクリプトは、MovieClipシンボルの第1フレームアクションに記述します。
答1:
ActionScript 1.0で記述していますが、2.0の型指定を加えても構いません。
function xGetCircleArea(nRadius:Number):Number {
var nCircleArea:Number = nRadius * nRadius * Math.PI;
return nCircleArea;
}function xGetCircleArea(nRadius:Number):Number {
var nCircleArea:Number = Math.pow(nRadius, 2) * Math.PI;
return nCircleArea;
}答2:
function xGetCircleArea(nRadius:Number):Number {
if (nRadius < 0) {
return NaN;
}
var nCircleArea:Number = nRadius * nRadius * Math.PI;
return nCircleArea;
}function xGetCircleArea(nRadius:Number):Number {
if (nRadius < 0) {
return NaN;
} else {
var nCircleArea:Number = Math.pow(nRadius, 2) * Math.PI;
return nCircleArea;
}
}答3:
addEventListener(Event.ENTER_FRAME, xRotate);
function xRotate(eventObject:Event):void {
rotation += 10;
}







