見出し画像

高校数学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

いいなと思ったら応援しよう!