情報領域演習第一:P演習

電気通信大学情報理工学域I類 (情報系)
2018年度後学期


[一覧に戻る]


課題A5

問題

平面上の三角形を考えると,その外心,重心,垂心は同一直線上に必ずある.そのような直線は発見者にちなんで「オイラー直線」と呼ばれる.実際,重心は外心と垂心を線分を1:2で内分する点である. これをコンピュータ上で検証してみたい.三角形の頂点A, B, Cの座標が (xa, ya), (xb, yb), (xc, yc) であるとき,その三角形の外心,重心,垂心の座標を計算し,外心と垂心を結ぶ線分を1:2に内分する点の座標を求め,それが重心と一致することを確かめよ. そのために,これらの座標を表示するメソッド eulerline(xa, ya, xb, yb, xc, yc) を作成せよ.

入力仕様

出力仕様

ヒント

Rubyのprintfにおいて,表示される数の小数点以下の桁数を指定するためには,「f」を用いる.例えば,
printf("%.3f", x)
とすれば,x を小数点以下第3位まで表示する.

ヒント

頂点を A = $(x_a, y_a)$, B = $(x_b, y_b)$, C = $(x_c, y_c)$ とする三角形の外心 $(x_o, y_o)$ は以下のように与えられる. \[ x_o = \frac{(x_a^2+y_a^2)(y_b-y_c)+(x_b^2+y_b^2)(y_c-y_a)+(x_c^2+y_c^2)(y_a-y_b)}{2(x_a(y_b-y_c)+x_b(y_c-y_a)+x_c(y_a-y_b))}, \] \[ y_o = \frac{(x_a^2+y_a^2)(x_c-x_b)+(x_b^2+y_b^2)(x_a-x_c)+(x_c^2+y_c^2)(x_b-x_a)}{2(x_a(y_b-y_c)+x_b(y_c-y_a)+x_c(y_a-y_b))}. \] 頂点を A = $(x_a, y_a)$, B = $(x_b, y_b)$, C = $(x_c, y_c)$ とする三角形の重心 $(x_g, y_g)$ は以下のように与えられる. \[ x_g = \frac{x_a+x_b+x_c}{3}, \] \[ y_g = \frac{y_a+y_b+y_c}{3}. \] 頂点を A = $(x_a, y_a)$, B = $(x_b, y_b)$, C = $(x_c, y_c)$ とする三角形の垂心 $(x_h, y_h)$ は以下のように与えられる. \[ x_h = \frac{ (x_a x_c + y_b^2) (y_a - y_c) + (x_b x_c + y_a^2) (y_c - y_b) + (x_a x_b + y_c^2) (y_b - y_a) }{x_a y_b + x_b y_c + x_c y_a - x_a y_c - x_b y_a - x_c y_b}, \] \[ y_h = \frac{ - (y_a y_c + x_b^2) (x_a - x_c) - (y_b y_c + x_a^2) (x_c - x_b) - (y_a y_b + x_c^2) (x_b - x_a) }{x_a y_b + x_b y_c + x_c y_a - x_a y_c - x_b y_a - x_c y_b}. \] 点 P = $(x_p, y_p)$ とQ = $(x_q, y_q)$ を結ぶ線分を $m$:$n$ に内分する点 $(x_s, y_s)$ は以下のように与えられる. \[ x_s = \frac{n x_p + m x_q}{m+n}, \] \[ y_s = \frac{n y_p + m y_q}{m+n}. \]

ヒント

緑が外心,青が重心,赤が垂心.(マウスで動かせる.)
(http://cindyjs.org/examples/21_EulerLine.htmlより)

irb> eulerline 0.000, 0.000, 1.000, 1.000, 0.000, 2.000
0.000 1.000 0.333 1.000 1.000 1.000 0.333 1.000
=> nil
irb> eulerline 0.000, 0.000, 1.000, 1.000, 2.000, 4.000
-3.000 4.000 1.000 1.667 9.000 -3.000 1.000 1.667
=> nil
irb> eulerline -1.234, 5.678, 2.345, 6.789, 3.456, -7.890
2.667 -0.568 1.522 1.526 -0.767 5.713 1.522 1.526
=> nil
irb> eulerline 14.142, 24.360, 31.416, 27.183, 0.000, 0.000
26.880 0.680 15.186 17.181 -8.201 50.182 15.186 17.181
=> nil

提出法

CED (CentOS) にて,プログラムを作成したディレクトリで以下を実行せよ.
% ~oa000833/enshu1p/checker_a5.rb ファイル名
「Submission successfully completed.」と表示されれば,提出が完了したことになる.


[一覧に戻る]


[Teaching Top] [Top]
okamotoy@uec.ac.jp