高校数学10分プログラミング(数学B編 2.空間のベクトル)4日目「空間ベクトルの内積を考える1」
マガジンリスト > 数学B編 2.空間のベクトル > 4日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学B編 2.空間のベクトル)の4日目です。
本日の課題は、空間ベクトルの内積を計算するプログラムを作成することです。
空間ベクトルの内積
まず、空間ベクトルの内積についてその性質も含めてまとめておきます。なお、以下で$${k}$$は実数とし、$${\vec{a} = (a_1, a_2, a_3), \ \vec{b} = (b_1, b_2, b_3), \ \vec{a} \neq \vec{0}, \ \vec{b} \neq \vec{0}}$$とします。また、$${\vec{a}}$$と$${\vec{b}}$$のなす角を$${ \theta \ ( 0^{\circ} \leq \theta \leq 180^{\circ} ) }$$とします。
空間ベクトルの内積と成分
① 定義
$$
\vec{a} \cdot \vec{b} = | \vec{a} || \vec{b} | \cos \theta
$$
② 成分表示
$$
\vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 + a_3 b_3
$$
③ なす角
$$
\cos \theta = \frac{ \vec{a} \cdot \vec{b} }{ | \vec{a} || \vec{b} | } = \frac{ a_1b_1+a_2b_2+a_3b_3}{ \sqrt{ a_1^2+a_2^2+a_3^2 } \sqrt{ b_1^2+b_2^2+b_3^2 }}
$$
課題
次の2つの空間ベクトル$${ \vec{a}, \vec{b} }$$のそれぞれの大きさと内積を計算し、そのなす角を求めて、コンソールに出力するプログラムを作成してください。
$${ \vec{a} = ( 1, 1, 0 ), \ \vec{b} = ( 1, 2, -2 ) }$$
ヒント
今回のプログラムでは、空間ベクトル$${\vec{a}=(a_1,a_2,a_3)}$$を PVector クラスの変数 a として与えたときに、空間ベクトルの成分が a.x, a.y, a.z で取り出せることを利用してプログラムを作成してみてください。
※記事『高校数学10分プログラミング(数学B編 1.平面上のベクトル)2日目「ベクトルの内積を計算する」』で、平面上のベクトルに対する内積の計算を行っていますので、こちらも参考にしてみてください。
プログラム
上記のヒントをもとに、課題の2つのベクトル$${ \vec{a}, \vec{b} }$$のそれぞれの大きさと内積を計算し、そのなす角を求めるプログラム(未完成)を示します(ソースコード1)。
// 2つの空間ベクトルの内積とそのなす角を計算する
void setup(){
// 2つの空間ベクトル
PVector a = new PVector(1.0, 1.0, 0.0);
PVector b = new PVector(1.0, 2.0, -2.0);
// 2つのベクトルの大きさ
float magnitude_a =
float magnitude_b =
// 2つのベクトルの内積を計算する
float innerproduct =
// なす角を求める
float cos_theta =
float theta =
println( "ベクトルaの大きさ:", magnitude_a);
println( "ベクトルbの大きさ:", magnitude_b);
println( "ベクトルの内積:", innerproduct);
println( "ベクトルのなす角:", theta);
}
ソースコード1 2つのベクトル$${ \vec{a}, \vec{b} }$$のそれぞれの大きさと内積を計算し、そのなす角を求めるプログラム(未完成)
ソースコード1の中で、ベクトル$${\vec{a}, \vec{b}}$$の大きさ、2つのベクトルの内積、2つのベクトルのなす角を計算する式を記載していません。上記の空間ベクトルの内積と成分の節で説明した式をもとに、式を追記してプログラムを完成させてください。
なお、 スケッチ名は「calcInnerProduct3D」とします。
それでは、よろしくお願いします。
MK's papa