![見出し画像](https://assets.st-note.com/production/uploads/images/163645926/rectangle_large_type_2_b4b0829db139bcf2711893ce956dd70c.jpeg?width=1200)
高校数学10分プログラミング(数学B編 2.空間のベクトル)3日目「空間ベクトルの演算を考える2」
マガジンリスト > 数学B編 2.空間のベクトル > 3日目 課題
おはようございます。
本日は、高校数学10分プログラミング(数学B編 2.空間のベクトル)の3日目です。
本日の課題は、空間ベクトルの演算を行うプログラムを作成することです。
ベクトルの演算
空間ベクトルの基本的な演算についてまとめておきます。
空間ベクトルの分解
4点$${\mathrm{O, A, B, C}}$$は同じ平面上にないとする。
$${\overrightarrow{\mathrm{OA}}=\vec{a}, \overrightarrow{\mathrm{OB}}=\vec{b}, \overrightarrow{\mathrm{OC}}=\vec{c} }$$とすると、任意のベクトル$${\vec{p}}$$は、
$$
\vec{p} = s \vec{a} + t \vec{b} + u \vec{c}
$$
($${s, t, u}$$は実数)の形にただ1通りに表される。
座標と空間ベクトル
$${\mathrm{A}(a_1, a_2, a_3), \mathrm{B}(b_1, b_2, b_3)}$$とする。
$$
\overrightarrow{\mathrm{AB}} = (b_1-a_1, b_2-a_2, b_3-a_3), \\ | \overrightarrow{\mathrm{AB}}| = \sqrt{ (b_1-a_1)^2+(b_2-a_2)^2+(b_3-a_3)^2}
$$
課題
$${\mathrm{A}(0,1,2), \mathrm{B}(1,-1,1), \mathrm{C}(2,1,-1)}$$のとき、次のベクトルを成分で表して、これらの空間ベクトルを図示するプログラムを作成してください。
$$
(1) \overrightarrow{\mathrm{AB}}, \ \ \ \ (2) \ \overrightarrow{\mathrm{BC}}, \ \ \ \ (3) \ \overrightarrow{\mathrm{AC}}, \ \ \ \ (4) \ \overrightarrow{\mathrm{CA}}
$$
ヒント
プログラム
今回の課題のベクトルを成分で表して、これらの空間ベクトルを図示するプログラムをスケッチ「operate3DVectors2」として準備しました。以下の zip ファイルをダウンロードして展開または解凍してご利用ください。
展開または解凍して得られるスケッチ「operate3DVectors2」の中のpdeファイル「operate3DVectors2.pde」をダブルクリックしてスケッチ「operate3DVectors2」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「operate3DVectors2」タブを選択すると、そのテキストエリアに以下のソースコードが書かれています。
float range; // 座標系での表示範囲-range≦x,y.z≦range
float res; // 座標系のサイズをキャンバスのサイズに変換するパラメータ
float angle = 0.0;
PVector a, b, c; // 与えられた空間上の点A,B,Cを表す座標
PVector d1, d2, d3, d4; // 演算後の空間ベクトル
void setup(){
size(400, 400, P3D);
noFill();
ortho();
range = 10.0;
res = width / 2.0 / range;
// 3つの点を表す空間の座標
a = new PVector(0.0, 1.0, 2.0);
b = new PVector(1.0, -1.0, 1.0);
c = new PVector(2.0, 1.0, -1.0);
// (1) ベクトルAB
d1 = b.copy().sub(a.copy());
// (2) ベクトルBC
d2 =
// (3) ベクトルAC
d3 =
// (4) ベクトルCA
d4 =
println("(1) ベクトルAB:", d1);
println("(2) ベクトルBC:", d2);
println("(3) ベクトルAC:", d3);
println("(4) ベクトルCA:", d4);
}
void draw(){
background(204); // 背景をグレーにする
// 視点を設定する
camera(200.0, -200.0, 100.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0);
// マウスボタンが押されたときの処理
if(mousePressed){
if( mouseButton == LEFT ){ // 左ボタンがおされたときはz軸時計周りに回転
angle = angle + 1.0;
} else if( mouseButton == RIGHT ){ // 右ボタンがおされたときはz軸反時計周りに回転
angle = angle -1.0;
} else {
}
}
// z軸周りに回転
rotateZ(radians(angle));
// 座標軸の設定
strokeWeight(1);
fill(255,0,0);
stroke(255,0,0);
arrow3D(0.0,0.0,0.0,range * res,0.0,0.0); // x軸(赤色)
fill(0,255,0);
stroke(0,255,0);
arrow3D(0.0,0.0,0.0,0.0,range * res,0.0); // y軸(緑色)
fill(0,0,255);
stroke(0,0,255);
arrow3D(0.0,0.0,0.0,0.0,0.0,range * res); // z軸(青色)
noFill();
stroke(0,0,0);
// 以下に、図形を描いていく
// 空間上の3点A,B,Cを描く
strokeWeight(5);
fill(0,0,0);
stroke(0,0,0);
point_rhs(a.copy().mult(res));
point_rhs(b.copy().mult(res));
point_rhs(c.copy().mult(res));
// (1) ベクトルAB(黄色)
strokeWeight(1);
fill(255,255,0);
stroke(255,255,0);
arrow3D(a.x*res,a.y*res,a.z*res, b.x*res,b.y*res,b.z*res);
// (2) ベクトルBC(桃色)
fill(255,0,255);
stroke(255,0,255);
arrow3D(b.x*res,b.y*res,b.z*res, c.x*res,c.y*res,c.z*res);
// (3) ベクトルAC(水色)
fill(0,255,255);
stroke(0,255,255);
arrow3D(a.x*res,a.y*res,a.z*res, c.x*res,c.y*res,c.z*res);
// (4) ベクトルCA(白色)
fill(255,255,255);
stroke(255,255,255);
arrow3D(c.x*res,c.y*res,c.z*res, a.x*res,a.y*res,a.z*res);
}
ソースコード1 ベクトルを成分で表して、これらの空間ベクトルを図示するプログラム(未完成)
このソースコード1の setup 関数内のベクトルを成分で表す部分
// (1) ベクトルAB
d1 = b.copy().sub(a.copy());
// (2) ベクトルBC
d2 =
// (3) ベクトルAC
d3 =
// (4) ベクトルCA
d4 =
は未完成です。課題(1)については例示していますので、それを参考に、課題(2),(3),(4)の式も記述してプログラムを完成させてください。
それでは、よろしくお願いします。
MK's papa