高校数学10分プログラミング(数学B編 2.空間のベクトル)5日目「空間ベクトルの内積を考える2」
マガジンリスト > 数学B編 2.空間のベクトル > 5日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学B編 2.空間のベクトル)の5日目です。
本日の課題は、空間ベクトルの内積を計算するプログラムを作成することです。
課題
次の2つの空間ベクトル$${ \vec{a}, \vec{b} }$$のそれぞれの大きさと内積を計算し、そのなす角を求めて、コンソールに出力するプログラムを作成してください。
$${ \vec{a} = ( 1, 1, 0 ), \ \vec{b} = ( 1, 2, -2 ) }$$
ヒント
課題は、前回(4日目)と全く同じものです。前回は空間ベクトル$${\vec{a}=(a_1,a_2,a_3)}$$を PVector クラスの変数 a として与えたときに、空間ベクトルの成分が a.x, a.y, a.z で取り出せることを利用してプログラムを作成しました。
今回は、同じ課題を PVector クラスの下記の関数を利用してプログラムを作成してください。
ベクトルの大きさを求める関数「mag」
PVectorクラスの変数 a で表したベクトルに対してその大きさを求めるときは、mag 関数を用います。
PVector a = new PVector(a1, a2, a3);
a.mag();
mag 関数は引数を取りませんが、返り値はベクトル a の大きさ(float型)となります。
2つのベクトルの内積を求める関数「dot」
PVector クラスの変数 a, b で表した2つのベクトルに対してそれらの内積を求めるときは、dot 関数を用います。
PVector a = new PVector(a1, a2, a3);
PVector b = new PVector(b1, b2, b3);
b.dot(a);
dot 関数の引数は内積を算出したいベクトル(PVector クラス)を取り、返り値は2つのベクトルの内積(float型)となります。
2つのベクトルのなす角を求める関数「angleBetween」
PVector クラスの変数 a, b で表した2つのベクトルに対してそれらのなす角を求めるときは、angleBetween 関数を用います。
PVector a = new PVector(a1, a2, a3);
PVector b = new PVector(b1, b2, b3);
PVector.angleBetween(a, b);
angleBetween 関数の引数は2つのベクトル(PVectorクラス)を取り、返り値は2つのベクトルのなす角(ラジアン、float型)となります。なお、mag 関数や dot 関数と違い「PVector.angleBetween」という形で利用することに注意してください。
プログラム
上記で解説した関数を利用して、課題の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 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つのベクトルのなす角を計算する式を記載していません。上記の PVector クラスの3つの関数を利用してプログラムを完成させてください。
なお、 スケッチ名は「calcInnerProduct3D2」とします。
それでは、よろしくお願いします。
MK's papa