【事前学習】 前回までの内容を再確認しておきましょう。
ベクトルの外積
Exterior Product
3次元空間中の2つのベクトルには、内積の他に外積と呼ばれる演算が存在する。2ベクトルの成分が $\vec{a} = (a_1, a_2, a_3)$ および $\vec{b} = (b_1, b_2, b_3)$ のとき、それら2ベクトルの外積は以下の式で求められる。 \[\vec{a} \times \vec{b} = (a_2 b_3 - a_3 b_2, a_3 b_1 - a_1 b_3, a_1 b_2 - a_2 b_1)\]
外積の結果はスカラーではなくベクトルとなる。その向きは $\vec{a}、\vec{b}$ のいずれにも垂直で、 $\vec{a}$ から $\vec{b}$ への回転で右ねじが進む方向となる。また、その大きさは、 $\vec{a}$ と $\vec{b}$ のなす角を $\theta$ として、$|\vec{a}| |\vec{b}| \sin \theta$ となる。これは $\vec{a}$ と $\vec{b}$ を隣り合う2辺とする平行四辺形の面積に等しい。
たとえば$x,y,z$軸方向の単位ベクトルをそれぞれ$\vec e_x,\vec e_y, \vec e_z$とすれば、$\vec e_x \times \vec e_y = \vec e_z$、$\vec e_y \times \vec e_x = -\vec e_z$
2辺が $a, b$、その間の角が $\theta$ の三角形の面積が$\frac{1}{2}a b \sin \theta$、$\vec{a} = (a_x,a_y)$、 $\vec{b} = (b_x,b_y)$で囲まれてできる三角形の面積が$\frac{1}{2}|a_x b_y - b_x a_y|$といった公式は外積を知っていれば容易に理解できる。
このような性質をもつ外積を使うことにより、空間中の平面の法線方向を求めたり、三角形の面積を求めたりすることができる。
内 積 | 外 積 | |
---|---|---|
次 元 | 任意の次元 | 3次元専用 |
演算結果 | 1次元(スカラー) | 3次元ベクトル |
意 味 | 2ベクトルの大きさとその間の余弦(コサイン)の積 | 向きは2ベクトルに垂直。 大きさは2ベクトルの大きさとその間の正弦(サイン)の積 |
用 途 | 射影ベクトル | 平面の法線ベクトル 三角形の面積 |
Lesson
- 2つのベクトル $\vec{a} = (3, 1, -3)$、 $\vec{b} = (1, 2, 4)$ の両方に垂直な単位ベクトルを求めよ。(外積の計算例)
- 2つのベクトル $\vec{a} = (1, 2, 6)$、 $\vec{b} = (-1, 1, 0)$ の両方に垂直で、大きさが3であるベクトルを求めよ。
- 3点 $\mathrm{A}(0, 1, 1)$、$\mathrm{B}(-1, -1, 2)$、$\mathrm{C}(2, 3, 1)$ を頂点とする $\triangle{\mathrm{ABC}}$ について、次のものを求めよ。
- $\triangle{\mathrm{ABC}}$ を含む平面に垂直な単位ベクトル
- $\triangle{\mathrm{ABC}}$ の面積
- $\triangle{\mathrm{ABC}}$ を含む平面に垂直な単位ベクトル
- Oを空間の座標の原点とし、$\mathrm{A}(1, 1, 1)$、$\mathrm{B}(-1, 2, 3)$、$\mathrm{C}(a, -1, 4)$ とする。
- $\triangle{\mathrm{ABC}}$ の面積 $\mathrm{S}(a)$ を求めよ。
- $-1≦a≦1$ のとき、$\mathrm{S}(a)$ の最小値を求めよ。
- 空間に4点、$\mathrm{A}(-2, 3, 1)$、$\mathrm{B}(1, 1, 2)$、$\mathrm{C}(-3, 2, -1)$、$\mathrm{D}(2, 4, -2)$ がある。*
- $\triangle{\mathrm{ABC}}$ を含む平面に垂直な単位ベクトル
- $\triangle{\mathrm{ABC}}$ の面積を求めよ。
- 四面体$\mathrm{ABCD}$ の体積を求めよ。
- $\triangle{\mathrm{ABC}}$ を底面とする四面体$\mathrm{ABCD}$ の高さを求めよ。
- $\triangle{\mathrm{ABC}}$ を含む平面に垂直な単位ベクトル
※ 赤矢印は$\Vec{AB} \times \Vec{AC}$
外積の計算例
$(3,$ $(1,$ | $1, -3$ $2,\ \ 4$ | $)$ $)$ |
行列式の「たすき掛け」の要領で $y,z$ 要素(赤枠内)の
$(1\times4)-(-3\times2)$
を計算する。
左上と右下、右上と左下をそれぞれ掛け合わせて、それらの差を求める。
$(10,□,□)$
外積の結果のうち $x$ の値が定まる。
$(3,\ 1,$ $(1,\ 2,$ | $-3)\ 3$ $\ \ 4)\ 1$ |
同様に $z,x$ 要素(赤枠内)で
$(-3\times1)-(3\times4)$
を計算する。
$x$ の要素 $3,1$ を右端に書き足す(コピーする)。
$(10,-15,□)$
外積の結果のうち $y$ の値が定まる。
$($ $($ | $3,\ 1,$ $1,\ 2,$ | $-3)$ $\ \ 4)$ |
同様に $x,y$ 要素(赤枠内)で
$(3\times2)-(1\times1)$
を計算する。
$(10,-15,5)$
外積の結果のうち $z$ の値が定まる。
Answer
- $(\frac{2}{\sqrt{14}}, -\frac{3}{\sqrt{14}}, \frac{1}{\sqrt{14}}), (-\frac{2}{\sqrt{14}}, \frac{3}{\sqrt{14}}, -\frac{1}{\sqrt{14}})$
$\vec a \times \vec b=(10,-15,5)$ の $\frac{1}{5}$ のベクトル $(2,-3,1)$ の単位ベクトルを求めるのが楽。 - $(-2, -2, 1), (2, 2, -1)$ $\vec a \times \vec b=(-6,-6,3)$
-
- $(-\frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}), (\frac{1}{\sqrt{3}}, -\frac{1}{\sqrt{3}}, -\frac{1}{\sqrt{3}})$
$\Vec{AB},\Vec{AC}$を求める。$\Vec{AB}=(-1,-2,1),\Vec{AC}=(2,2,0)$
$\Vec{AB} \times \Vec{AC}$を求める。
その単位ベクトルを求める。 - $\sqrt 3$ $\rm{S}=\frac{1}{2} |\Vec{AB} \times \Vec{AC}|,\ \Vec{AB} \times \Vec{AC}=(-2,2,2)$
- $(-\frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}), (\frac{1}{\sqrt{3}}, -\frac{1}{\sqrt{3}}, -\frac{1}{\sqrt{3}})$
- $\frac{1}{2} \sqrt{5a^2+6a+90}$
- $a=-\frac{3}{5} のとき \frac{21}{2\sqrt 5}$ 根号内が $5(a+\frac{3}{5})^2+\frac{441}{5}$
- $(\frac{1}{\sqrt 3},\frac{1}{\sqrt 3},-\frac{1}{\sqrt 3}), (-\frac{1}{\sqrt 3},-\frac{1}{\sqrt 3},\frac{1}{\sqrt 3})$ 3. 1) と同じ
- $\frac{5 \sqrt 3}{2}$ 3. 2) と同じ
- $\frac{20}{3}$ $\rm{V}=\frac{1}{6} |(\Vec{AB} \times \Vec{AC}) \cdot \Vec{AD}|)$ (スカラー三重積)
- $\frac{8}{\sqrt 3}$ $\frac{20}{3}$(錐体の体積)$=\frac{5 \sqrt 3}{2}$(底面積)×高さ×$\frac{1}{3}$
スカラー三重積の意味
平行六面体の体積は底面の平行四辺形の面積に平行六面体の高さを乗じたものです。$\vec h=\Vec{AB} \times \Vec{AC}$ とすると、$\vec h \cdot \Vec{AD}$ は$|\vec h||\Vec{AD} |\cos \theta$ ですが、このうち $|\vec h|$ が底面の平行四辺形の面積、$|\Vec{AD} |\cos \theta$ が平行六面体の高さとなっているので、$(\Vec{AB} \times \Vec{AC}) \cdot \Vec{AD}$ がちょうど平行六面体の体積となるのです。ちなみに四面体の体積は、底面の面積が平行四辺形の2分の1の三角形、錐体は柱体の体積の3分の1であることから、平行六面体の6分の1になります。
スカラー三重積と行列式
外積は行列式の値と深い関係があります。外積ベクトルの大きさは平行四辺形の面積と等しくなりますが、これは外積の元の2ベクトルでできる2×2行列の行列式の値(の絶対値)とも等しくなります。また、空間の平行六面体の体積は3辺を表す3ベクトルのスカラー3重積の値と等しくなりますが、これは3ベクトルでできる3×3行列の行列式の値でもあります。
Extra Lesson
three.js editor を使って、3Dの図形を表示してみましょう。
- Lesson 1. のベクトルを表示してみましょう。
- Lesson 2. のベクトルを表示してみましょう。
- Lesson 3.(1) のベクトルを表示してみましょう。
three.js editorの操作方法
視点移動
- SCENEタブでSceneをダブルクリックすると原点中心になる
- SCENEタブでオブジェクトをダブルクリックするとそのオブジェクトが中心に来て拡大される
- 左ボタンでマウスドラッグするとビューを画面の中心周りに回転できる
- 右ボタンでマウスドラッグするとビューを平行移動できる
オブジェクトの生成、変形
- Edit/Addでオブジェクト、ライト、カメラを追加できる
- SCENEタブで生成、変形したいオブジェクトを選べる
- Edit/Cloneで選ばれているオブジェクトを複製できる
- Edit/Deleteで選ばれているオブジェクトを消去できる
- OBJECTタブで名前Name、中心の位置Position、回転Rotation、拡大縮小Scaleを変更できる
- MATERIALタブで色などオブジェクトの材質を変更できる
データの保存
- File/Publishで、ウェブコンテンツとしてzipファイルで出力できる
- File/Export Sceneでシーン全体をJSON形式で保存、File/ImportでJSON形式のシーンを読み込みできる(SCRIPTは保存されないので注意!)
視点移動機能付の環境構築
- Add/Directional Light で光源を追加(2個追加して2方向から照らすのもよい)
- Scene に以下のコードをアタッチ
//ベクトルの成分 Lesson 3D 1. 3) const A=new THREE.Vector3(1, -4, 7); const B=new THREE.Vector3(7 , 2, 5); vector(A, B, 0.05); const C=new THREE.Vector3((A.x+B.x*2)/3, (A.y+B.y*2)/3, (A.z+B.z*2)/3); sphere(C, 0.5, 0xff0000); const distance=30; //原点からの距離 //以下は変更しないでください scene.add( new THREE.AxesHelper(100) );//座標軸 function sphere(position, radius, color=0xffffff){ const sphere = new THREE.Mesh( new THREE.SphereGeometry(radius,32,16), new THREE.MeshPhongMaterial({ color:color, specular:0x444444, shininess:30, emissive:color&0x333333 }) ); sphere.position.copy(position); scene.add(sphere); } function vector(start, end, radius, color=0xffffff){ const v=(new THREE.Vector3).subVectors(end,start); const l=v.length(); const material = new THREE.MeshPhongMaterial({ color:color, specular:0x444444, shininess:30, emissive:color&0x333333 }); const rotation = new THREE.Euler( Math.atan2(v.z,Math.sqrt(v.x*v.x+v.y*v.y)), 0, -Math.atan2(v.x,v.y), "ZXY" ); const cone=new THREE.Mesh( new THREE.ConeGeometry(radius*2, radius*6, 32), material ); cone.position.copy(new THREE.Vector3).addVectors( start, v.clone().multiplyScalar((l-0.15)/l) ); cone.rotation.copy(rotation); scene.add(cone); const cylinder=new THREE.Mesh( new THREE.CylinderGeometry(radius,radius,l-0.3,32), material ); cylinder.position.copy(new THREE.Vector3).addVectors( start, v.clone().multiplyScalar(0.5*(l-0.3)/l) ); cylinder.rotation.copy(rotation); scene.add(cylinder); } function line(position1, position2, color=0xfffff){ const line = []; line.push(position1); line.push(position2); scene.add(new THREE.Line( new THREE.BufferGeometry().setFromPoints(line), new THREE.LineBasicMaterial({color:color}) )); } function pointermove(event){ const longitude=(event.offsetX/window.innerWidth-0.5)*6.28; const latitude=(event.offsetY/window.innerHeight-0.5)*3; camera.position.set( Math.cos(longitude)*Math.cos(latitude), Math.sin(latitude), Math.sin(longitude)*Math.cos(latitude) ).multiplyScalar(distance); camera.lookAt( scene.position ); }
【事後学習】 外積の計算方法をマスターしておきましょう。