【事前学習】 高校のベクトル単元のベクトルの内積と成分について復習しておきましょう。
内積と成分
Inner Product & Vector Component
内積を使うと、ベクトルの長さや角度の情報と、成分(座標値)の情報の間を行き来することができるようになる。
2次元平面上の2つのベクトルの成分がそれぞれ $\vec a = (a_1, a_2)$ 、 $\vec b = (b_1, b_2)$、 $\vec a$ と $\vec b$ のなす角が $\theta$ のとき、それら2ベクトルの内積は以下の式で求められる。
\[\vec a \cdot \vec b = a_1 b_1 + a_2 b_2\]
\[\vec a \cdot \vec b = |\vec a| |\vec b| \cos \theta = \sqrt{a_1^2+a_2^2} \sqrt{b_1^2+b_2^2} \cos \theta \]
同様に3次元空間中の2つのベクトルの成分がそれぞれ $\vec a = (a_1, a_2, a_3)$ 、 $\vec b = (b_1, b_2, b_3)$、 $\vec a$ と $\vec b$ のなす角が $\theta$ のとき、それら2ベクトルの内積は以下の式で求められる。
\[\vec a \cdot \vec b = a_1 b_1 + a_2 b_2 + a_3 b_3\]
\[\vec a \cdot \vec b = |\vec a| |\vec b| \cos \theta = \sqrt{a_1^2+a_2^2+a_3^2} \sqrt{b_1^2+b_2^2+b_3^2} \cos \theta \]
Lesson
- 次のベクトル $\vec a,\ \vec b$ の内積と、そのなす角 $\theta$ を求めよ。
- $\vec a = (1,\sqrt{3}),\ \vec b = (-\sqrt{3},-1)$
- $\vec a = (2, 4),\ \vec b = (1, -3)$
- $\vec a = (1,\sqrt{3}),\ \vec b = (-\sqrt{3},-1)$
- $\vec 0$ でないベクトル $\vec a = (a_1, a_2)$ は、ベクトル $(a_2, -a_1)$ に垂直であることを示せ。
- ベクトル $\vec a = (2, -1)$ に垂直な単位ベクトルを求めよ。
- ベクトル $\vec a = (2, 1)$ に垂直で、大きさが $2\sqrt{5}$ のベクトルを求めよ。*
- ベクトル $\vec a = (3, 4)$ が $x$ 軸、$y$ 軸の正の向きとなす角を、それぞれ $\alpha,\ \beta$ とする。
- $\cos \alpha,\ \cos \beta$ の値を求めよ。
- $\cos^2 \alpha + \cos^2 \beta$ の値を求めよ。
- $\cos \alpha,\ \cos \beta$ の値を求めよ。
- $\vec a = (4, 3)$ と$60^\circ$の角をなし、大きさが2倍のベクトルを求めよ。
- ベクトル $\vec a = (2, 2x),\ \vec b = (x, 1),\ \vec c = (3, y)$ について、$\vec a$ と $\vec b$ のなす角が$60^\circ$ で、$\vec b$ と $\vec c$ が垂直であるとき、$x,\ y$ の値を求めよ。
- ベクトル $\vec a = (1, x),\ \vec b = (y, -1),\ \vec c = (-1, 1)$ について、$\vec a-\vec b$ と $\vec c$ は垂直で、$\vec b-\vec c$ と $\vec a$ は平行であるとき、$x,\ y$ の値を求めよ。
- ベクトル $\vec a = (4, 2),\ \vec b = (3, -1),\ \vec c = (x, y)$ について、$\vec a-\vec b$ と $\vec c$ は平行で、$\vec c-\vec b$ と $\vec a$ は垂直であるとき、$x,\ y$ の値を求めよ。
- 原点Oを始点とする位置ベクトル $\vec a=(4, 2),\ \vec b=(-5, 3)$ がある。
- $\vec b$ に垂直で、大きさが $|\vec b|$ に等しいベクトルを求めよ。
- $\vec c \perp \vec a,\ (\vec c-\vec b) \parallel \vec a$ となる、位置ベクトル $\vec c$ を求めよ。
- $\vec b$ に垂直で、大きさが $|\vec b|$ に等しいベクトルを求めよ。
Answer
- $-2\sqrt 3,\ 150^\circ$ $\cos\theta=-\frac{\sqrt 3}{2}$
- $-10,\ 135^\circ$ $\cos\theta=-\frac{1}{\sqrt 2}$
- 共に零ベクトルでない2ベクトルの内積が $0$ であれば $\cos \theta=0$ (垂直)
- $(\frac{1}{\sqrt 5}, \frac{2}{\sqrt 5}),\ (-\frac{1}{\sqrt 5}, -\frac{2}{\sqrt 5})$ 例えば $(1,2),\ (-1,-2)$ は垂直で大きさが$\sqrt 5$
- $(2,-4),\ (-2,4)$ 例えば $(1,-2),\ (-1,2)$ は垂直で大きさが$\sqrt 5$
- $\vec a$ の単位ベクトルは $(\cos \alpha,\ \cos \beta)$
$\cos \alpha=\frac{3}{5},\ \cos \beta=\frac{4}{5}$(方向余弦という)
- $1$
- $\vec a$ の単位ベクトルは $(\cos \alpha,\ \cos \beta)$
- $(4-3\sqrt 3,\ 3+4\sqrt 3),\ (4+3\sqrt 3,\ 3-4\sqrt 3) $
求めるベクトルを $(x,y)$ とすると、
$x^2+y^2=100$
$4x+3y=5 \cdot 10 \cdot \cos 60^\circ$ - $x=2+\sqrt 3,\ y=-6-3\sqrt 3 または x=2-\sqrt 3,\ y=-6+3\sqrt 3$
$\vec a \cdot \vec b =\sqrt{(4+4x^2)(x^2+1)}\ \frac{1}{2}=2x+2x,\ 7\pm2\sqrt{12}=(2\pm\sqrt 3)^2$
$\vec b \cdot \vec c = 3x+y=0$ - $x=2,\ y=-2$ または $x=-1,\ y=1$
$\vec a = (a_1, a_2),\ \vec b = (b_1, b_2)$ が平行の条件は $a_1:a_2=b_1:b_2$ すなわち $a_1 b_2=a_2 b_1$ - $x=1,\ y=3$
- $(3,5)$ または $(-3,-5)$
- $\left(-\frac{11}{5},\frac{22}{5}\right)$
Lesson 3D
- 次の2つのベクトル $\vec a,\ \vec b$ について、内積とそのなす角を求めよ。
- $\vec a = (1, 2, 1),\ \vec b = (-2, 2, 4)$
- $\vec a = (-1, 0, 1),\ \vec b = (-1, 2, 2)$
- $\vec a = (2, -3, 1),\ \vec b = (-3, 1, 2)$
- $\vec a = (1, 2, 1),\ \vec b = (-2, 2, 4)$
- 3点 $\mathrm{A}(1, 0, 2),\ \mathrm{B}(1, 1, 1),\ \mathrm{C}(-1, -1, 1)$ がある。このとき、$\triangle\mathrm{ABC}$ の3つの内角の大きさを求めよ。*
- ベクトル $\vec a = (1, 2, 2)$ が $x$ 軸、$y$ 軸、$z$ 軸の正の向きとなす角を、それぞれ $\alpha,\ \beta,\ \gamma$ とする。
- $\cos \alpha,\ \cos \beta,\ \cos \gamma$ の値を求めよ。
- $\cos^2 \alpha + \cos^2 \beta + \cos^2 \gamma$ の値を求めよ。
- $\cos \alpha,\ \cos \beta,\ \cos \gamma$ の値を求めよ。
- ベクトル $\vec a = (2, 0, 2),\ \vec b = (1, 2, 3)$ について、$\vec a-\vec b$ と $\vec a$ は垂直であることを示せ。
- $x$ 軸、$y$ 軸の正の向きとなす角がそれぞれ$45^\circ,\ 60^\circ$、大きさ2のベクトルの成分を求めよ。このベクトルの $z$ 軸の正の向きとなす角は何度か。
Answer
- $6,\ 60^\circ$
- $3,\ 45^\circ$
- $-7,\ 120^\circ$
- $\overrightarrow{\mathrm{AB}}=(0,1,-1),\ \overrightarrow{\mathrm{AC}}=(-2,-1,-1),\ \overrightarrow{\mathrm{AB}} \cdot \overrightarrow{\mathrm{AC}}=0$ より $\angle \mathrm{A}=90^\circ$
$\overrightarrow{\mathrm{BA}}=(0,-1,1),\ \overrightarrow{\mathrm{BC}}=(-2,-2,0),\ \angle \mathrm{B}=60^\circ,\ \angle \mathrm{C}=30^\circ$ - $\vec a$の単位ベクトルは $(\cos \alpha,\ \cos \beta,\ \cos \gamma)$
$\cos \alpha=\frac{1}{3},\ \cos \beta=\frac{2}{3},\ \cos \gamma=\frac{2}{3}$(方向余弦という)
- $1$
- $\vec a$の単位ベクトルは $(\cos \alpha,\ \cos \beta,\ \cos \gamma)$
- $\vec a-\vec b=(1,-2,-1)$, $(\vec a-\vec b) \cdot \vec a=0$ より
- $\cos^2 \alpha+\cos^2 \beta+\cos^2 \gamma = 1$ より
単位ベクトルは $(\cos 45^\circ,\ \cos 60^\circ,\ \pm \frac{1}{2})$
長さ$2$だと $(\sqrt 2, 1, \pm 1)$
$(\sqrt 2, 1, 1),\ 60^\circ$ または $(\sqrt 2, 1, -1),\ 120^\circ$
Extra Lesson
three.js editor を使って、3Dの図形を表示してみましょう。
- Lesson 3D 1.(1) のベクトルを表示してみましょう。
- Lesson 3D 2. の3点 A,B,C を表示して、内角をを確認してみましょう。
- Lesson 3D 4. の $\vec a-\vec b$ と $\vec a$ が垂直であることを確認してみましょう。
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 ); }
【事後学習】 内積を通じて座標値と角度との相互関係をイメージできるようになりましょう。