Pythonで直角三角形の斜辺中点と底辺がなす角度を求める方法
問題概要
直角三角形ABCがあり、2つの辺ABとBCの長さが与えられているとします。斜辺ACの中点をMとしたとき、点Mと底辺BCがなす角度を求めるのがこの記事の目的です。

例として ab = 6、bc = 4 を入力すると、出力は 56.309932474020215 になります。これは arctan(6/4) ≒ 0.9828 ラジアンであり、これを度数法に変換すると約 56.31 度になるためです。
数学的な背景
直角三角形では、斜辺の中点Mは外心、つまり3つの頂点から等しい距離にある点になります。したがって MB = MC が成り立ち、三角形MBCは二等辺三角形です。このことから、求めたい角度 ∠MBC は ∠MCB(角C)と等しくなります。
角Cは tan(C) = AB / BC と表せるため、次の式で計算できます。
C = arctan(ab / bc)
あとはこの結果をラジアンから度数法へ変換すれば答えが得られます。
解法の手順
- ans := arctan(ab / bc) を計算する
- ans を度数法に変換して返す
実装例
以下はPythonでの実装例です。mathモジュールの atan 関数で逆正接を求め、pi を使って度数法に変換しています。なお、標準ライブラリには変換用の math.degrees() 関数も用意されているため、そちらを使うとさらに簡潔に書けます。
from math import atan, pi
def solve(ab, bc):
def deg(rad):
return 180 / pi * rad
ans = deg(atan(ab / bc))
return ans
ab = 6
bc = 4
print(solve(ab, bc))入力
6, 4
出力
56.309932474020215
-
Pythonで二分木の全ノードの値の合計を求めるプログラム
二分木(バイナリツリー)にいくつかの値が格納されている場合、木に含まれるすべての値の合計を求めたいことがあります。例えば、次のような二分木が入力として与えられたとします。この場合、出力は 14 になります(2 + 4 + 3 + 5 = 14)。解決のアプローチこの問題を解くには、再帰を使って各ノードを順番に訪問し、値を足し合わせていきます。具体的な手順は以下の通りです。関数 recurse() を定義します。引数としてノードを受け取ります。変数 val に現在のノードの値を代入します。ノードの左の子が存在する場合は、val に左部分木の再帰結果を加算します。ノードの右の子が存在する場合は、v
-
Pythonで二分木の葉ノードと非葉ノードの数を求めるプログラム
二分木が与えられたとき、最初の要素に葉ノード(リーフノード)の数、2番目の要素に非葉ノードの数を格納した2つの数値のペアを求める問題を考えてみましょう。例えば、次のような二分木が入力として与えられた場合を考えます。この木には葉ノードが3つ、非葉ノードが2つ存在するため、出力は (3, 2) となります。解き方のアルゴリズムこの問題は、再帰処理を使って以下の手順で解くことができます。ノード n が null(None)である場合は、(0, 0) を返します。n の左の子と右の子がどちらも null の場合(つまり n が葉ノードの場合)は、(1, 0) を返します。left := solve(n