ActionScript 3.0で始めるオブジェクト指向スクリプティング

第52回 ベクトルの外積で回転の軸を定める

この記事を読むのに必要な時間:およそ 6.5 分

ベクトルの外積を数学的に理解する

ベクトルの外積について,数学的な説明をしよう。数学が嫌いな読者は,流し読みしてもらって構わない。ベクトルAとBの外積は「A×B」で表される※1⁠。求まる結果は,内積が数値だったのに対して,外積はベクトルである。ベクトルには大きさと方向があった。

まず,外積A×Bの方向については,角度がベクトルAとBのどちらにも垂直になる。そして,ベクトルAからBに向かう回転を考えたとき,その回し方で右ネジの進む向きに定められる(下表1参照⁠⁠。つぎに,外積A×Bの大きさ|A×B|は,ベクトルAとBのなす角をθとしたとき,つぎの式で表される。

  • |A×B| = |A||B|sinθ

ベクトルAとBを隣合う2辺とする平行四辺形を考え,2辺のなす角をθとすると,底辺を|A|としたとき|B|sinθは平行四辺形の高さになる。したがって,外積の大きさ|A||B|sinθは,この平行四辺形の面積に等しい。このようにして定められる外積A×Bのベクトルをまとめたのが次表1だ。

表1 外積A×Bで定められるベクトル

外積の要素求められた外積のベクトルとふたつのベクトルAとBとの関係
方向角度 ふたつのベクトルAとBのどちらにも垂直画像
向きベクトルAからBに向かう回転で右ネジの進む向き
大きさ|A||B|sinθ画像

前回の内積の説明で述べたとおり,ふたつのベクトルのなす角θは,小さい方の角度つまり0以上π(180度)以下の範囲で定める(第51回ベクトルの内積で面の向きを調べる「ベクトルの内積を数学的に理解する」の項参照⁠⁠。ふたつのベクトルAとBが平行,つまり互いのなす角θが0またはπ(180度)のときsinθ = 0となり,外積の大きさ|A×B| = 0になる※2⁠。

逆に,ふたつのベクトルAとBの外積の大きさ|A×B|が0なら,それらは互いに平行だということになる。他方,前回ご説明した内積A・Bは,値が0のときふたつのベクトルは互いに垂直だった。つまり,ふたつのベクトルのなす角が垂直とか平行という特別な場合については,内積や外積から直ちに確かめられるのだ表2⁠。

表2 内積や外積からふたつのベクトルのなす角が特別な場合を確かめる

演算特別な場合互いになす角
内積内積が0垂直
外積外積の大きさが0平行

3次元空間のベクトルAとBの外積A×Bは,内積A・Bと同じく,それぞれの座標から計算することもできる。ベクトルAとBの座標がそれぞれ(ax, ay, azおよび(bx, by, bzである場合,外積A×Bはつぎの式で導かれる。

  • A×B =(aybz - azby, azbx - axbz, axby - aybx

次回は再び内積をお題として,すでにできあがったスクリプトの書替えではなく,新たなサンプルをひとつつくってみたい。

※1)
ベクトルに掛け算は定義されていないので,演算記号「×」「掛ける」とは読まない。あえて読み上げるときは,記号のかたちから「クロス」⁠cross)という。内積の演算記号「・」は同じく「ドット」⁠dot)と呼ばれる。⁠積」は英語で"product"なので,メソッド名の"crossProduct"と"dotProduct"は,これらの記号の呼び名に由来する。
※2)
大きさが0のベクトルも定義されている。そのすべての座標値は0である。
なお,[ヘルプ]で[Vector3D]クラスのcrossProduct()メソッドの項を読むと,戻り値について本稿執筆時点ではつぎのように説明されている。

  • 返されたVector3Dオブジェクトの座標が(0, 0, 0)の場合,2つのVector3Dオブジェクトは互いに垂直です。
しかし,本文に述べたとおり,このときふたつのVector3Dオブジェクトが表すベクトルは,互いに「垂直」ではなく「平行」(⁠Flash Professional CS5/5.5ヘルプ正誤表参照⁠⁠。英文の[Vector3D]のページには,[Comments]の欄に"parallel"(平行)の間違いだろうと突っ込みが入り,Adobeからそれを認める回答が添えられている。

今回解説した次のサンプルファイルがダウンロードできます。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書