見出し画像

高校数学10分プログラミング(数学B編 1.平面上のベクトル)4日目「ベクトルと図形の性質を考える」

マガジンリスト > 数学B編 1.平面上のベクトル > 4日目 課題

おはようございます。

本日は、高校数学10分プログラミング(数学B編 1.平面上のベクトル)の4日目です。

本日の課題は、ベクトルと図形に関する性質の応用例として、三角形の内心の位置ベクトルを計算して、座標上に描くプログラムを作成することです。


ベクトルと図形に関する性質

まず、ベクトルと図形に関する性質についてまとめておきます。

一直線上の3点
2点$${\mathrm{A, B}}$$が異なるとき
点$${\mathrm{P}}$$が直線$${\mathrm{AB}}$$上にある $${ \Leftrightarrow }$$ $${ \overrightarrow{ \mathrm{AP} } = k \overrightarrow{ \mathrm{AB} } }$$となる実数$${k}$$がある

ベクトルの相等
$${ s, t, s', t' }$$は実数とする。
$${ \vec{a} \neq \vec{0}, \ \vec{b} \neq \vec{0}, \ \vec{a}  / \!\! /  \!\!\!\!\! \backslash  \vec{b} }$$のとき、

$$
s \vec{a} + t \vec{b} = s' \vec{a} + t' \vec{b}  \Leftrightarrow  s = s', \ t = t'
$$

特に

$$
s \vec{a} + t \vec{b} = \vec{0}  \Leftrightarrow  s=t=0
$$


課題

平面上の3点$${\mathrm{A}(\vec{a}=(1,1))}$$、$${\mathrm{B}(\vec{b}=(7,1))}$$、$${\mathrm{C}(\vec{c}=(3,5))}$$を頂点とする$${ \triangle \mathrm{ABC}}$$に、その内心$${\mathrm{I}}$$の位置ベクトル$${\vec{i}}$$を描くプログラムを作成してください。


ヒント

三角形の内心は「3つの内角の二等分線が交わる点」となります(図1)。

図1 三角形の内心と内接円

三角形の内心はその三角形の内接円の中心となります。

そして、内心の位置ベクトル$${\vec{i}}$$は、$${ \triangle \mathrm{ABC}}$$の頂点の位置ベクトル$${ \vec{a}, \ \vec{b}, \ \vec{c} }$$を用いて、

$$
\vec{i} = \frac{1}{p} \left( \left|\vec{c}-\vec{b} \right| \vec{a}+\left|\vec{a}-\vec{c} \right| \vec{b}+\left|\vec{b}-\vec{a} \right| \vec{c} \right)
$$

と表すことができます。ここで、$${p}$$は$${ \triangle \mathrm{ABC}}$$の周囲の長さを表し、

$$
p=\left|\vec{b}-\vec{a} \right|+\left|\vec{c}-\vec{b} \right|+\left|\vec{a}-\vec{c} \right|
$$

で与えられます。


プログラム

今回の課題の内心$${\mathrm{I}}$$の位置ベクトル$${\vec{i}}$$を描くためのスケッチ「drawPositionVectorofInnerCenter」を準備しました。以下の zip ファイルをダウンロードして展開または解凍してご利用ください。

展開または解凍して得られるスケッチ「drawPositionVectorofInnerCenter」の中のpdeファイル「drawPositionVectorofInnerCenter.pde」をダブルクリックしてスケッチ「drawPositionVectorofInnerCenter」の開発環境ウィンドウを立ち上げます。開発環境ウィンドウのタブ欄で「drawPositionVectorofInnerCenter」タブを選択すると、そのテキストエリアに以下のソースコードが書かれています。

// 三角形の内心の位置ベクトルを描く
void setup(){
  size(500,500,P2D);
  noLoop();
  float x_range = 10.0; // x軸の表示範囲 -x_rangeからx_rangeまで
  float y_range = 10.0; // y軸の表示範囲 -y_rangeからy_rangeまで 
  setAxes(x_range, y_range); // 座標軸の準備

  // △ABCの頂点の位置ベクトル
  PVector a = new PVector(1.0, 1.0);
  PVector b = new PVector(7.0, 1.0);
  PVector c = new PVector(3.0, 5.0);
  
  // 三角形ABCの各辺の長さ
  float AB_length = ;
  float BC_length = ;
  float CA_length = ;
  
  // 三角形の周囲の長さ
  float perimeter = ;
  
  // 内心の位置ベクトル
  PVector i = 
  
  // 以下に図形を描いていく
  noFill(); // 図形の中身を塗りつぶさない

  // △ABCを描く
  stroke(128,128,128);
  triangle(
    a.x * width / 2.0 / x_range, a.y * width / 2.0 / x_range, 
    b.x * width / 2.0 / x_range, b.y * width / 2.0 / x_range, 
    c.x * width / 2.0 / x_range, c.y * width / 2.0 / x_range
  );  
  
  // 三角形の頂点の位置ベクトルの色を黒色に設定
  stroke(0,0,0); 
  // キャンバスにベクトルを描画
  arrow(0.0, 0.0, a.x, a.y, x_range);
  arrow(0.0, 0.0, b.x, b.y, x_range);
  arrow(0.0, 0.0, c.x, c.y, x_range);

  // 内心の位置ベクトルを赤色に設定
  stroke(255,0,0);
  arrow(0.0, 0.0, i.x, i.y, x_range);

}

ソースコード1 $${ \triangle \mathrm{ABC}}$$に、その内心$${\mathrm{I}}$$の位置ベクトル$${\vec{i}}$$を描くプログラム(未完成)

このソースコード1の、$${ \triangle \mathrm{ABC}}$$の各辺の長さを与える部分

  // 三角形ABCの各辺の長さ
  float AB_length = ;
  float BC_length = ;
  float CA_length = ;

や、三角形の周囲の長さを与える部分

  // 三角形の周囲の長さ
  float perimeter = ;

そして、内心の位置ベクトル$${\vec{i}}$$を与える部分

  // 内心の位置ベクトル
  PVector i = 

は未完成です。ヒントで与えた式を参考に、未完成の部分に追記して、プログラムを完成させてください。


それでは、よろしくお願いします。

MK's papa

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