算額(その1350)
二十九 群馬県高崎市山名町 八幡宮 文化11年(1814)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:直角三角形,正三角形,正方形,円
#Julia, #SymPy, #算額, #和算
直角三角形の中に,正三角形,正方形,円を容れる。直角三角形の面積を,直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和で表す術を述べよ。
正三角形の一辺の長さを a
正方形の一辺の長さを c
直角三角形の 3 辺をそのまま「鈎」,「股」,「弦」
股 = 2a + b, b = a - c
円の半径を r
「直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和」を K
とおく。
図中の(隠れているものも含む)直角三角形は,辺の比が 1:√3:2 であり,相似(合同)である(証明,説明省略)。よって,弦 = 2鈎,股 = √3鈎である。
また,正三角形の右にある三角形は頂角 120° の二等辺三角形である。
これらの長さの関係について以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms 鈎, 股, 弦, a, b, c, r, K
弦 = 2鈎
股 = √Sym(3)鈎
b = a - c
eq1 = 鈎 + 股 + 弦 + a + c + 2r - K
eq2 = 2a + b - 股
eq3 = (a + 2b)/√Sym(3) + √Sym(3)a - 弦
eq4 = (a - c + 2b) + c - (鈎 - 2c/√Sym(3) + √Sym(3)b) - 2r
eq5 = a - c + 2b - √Sym(3)c;
res = solve([eq1, eq2, eq4, eq5], (鈎, a, c, r));
鈎は長精度整数を含む分数式で表される。
res[鈎] |> println
294669784542913660789*K/(1846975238059608604496 + 1066351650880288157387*sqrt(3)) + 170127679427900227272*sqrt(3)*K/(1846975238059608604496 + 1066351650880288157387*sqrt(3))
しかし,以下のようにあっけなく簡約化される。
ans_鈎 = res[鈎] |> simplify |> factor
ans_鈎 |> println
K*(sqrt(3) + 8)/61
直角三角形の面積は 鈎*股/2 = √3*鈎^2 で,簡約化すると K^2*(48 + 67*sqrt(3))/7442 になる。
すなわち,「直角三角形の面積は,直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和の平方の,(48 + 67√3)/7442 倍である。」
ans_鈎 * √Sym(3)ans_鈎 / 2 |> simplify |> println
K^2*(48 + 67*sqrt(3))/7442
ちなみに,a, c, r も K の関数として,それぞれ以下のように表される。
res[a] |> simplify |> factor |> println
res[c] |> simplify |> factor |> println
res[r] |> simplify |> factor |> println
K*(-5 + 7*sqrt(3))/61
K*(-18 + 13*sqrt(3))/61
-K*(-57 + 31*sqrt(3))/122
たとえば,K = 100 のとき,パラメータは以下のようになる。
K = 100; 鈎 = 15.9541816517523; 股 = 27.6334532140181; 弦 = 31.9083633035045; a = 11.6792715622658; b = 4.27491008948646; c = 7.40436147277935; r = 2.71018439784;
6 和が 100 になることが確かめられる。
鈎 + 股 + 弦 + a + c + 2r
100.00000000000004
function draw(K, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
鈎 = K*(√3 + 8)/61
a = K*(7√3 - 5)/61
c = K*(13√3 - 18)/61
r = K*(57 - 31√3)/122
弦 = 2鈎
股 = √3鈎
b = a - c
@printf("K = %.15g; 鈎 = %.15g; 股 = %.15g; 弦 = %.15g; a = %.15g; b = %.15g; c = %.15g; r = %.15g\n ", K, 鈎, 股, 弦, a, b, c, r)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
circle(r, r, r)
plot!([b, b + a, b + a/2, b], [0, 0, √3a/2, 0], color=:blue, lw=0.5)
plot!([0, √3c/2, √3c/2 + c/2, c/2, 0], [鈎 - 2c/√3, 鈎 - 2c/√3 - c/2, 鈎 - 2c/√3 - c/2 + √3c/2, 鈎 - 2c/√3 + √3c/2, 鈎 - 2c/√3], color=:green, lw=0.5)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:gray80, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(b, 0, "b", :blue, :center, delta=-delta)
point(b + a, 0, "b+a", :blue, :center, delta=-delta)
point(b + 2a, 0, "b+2a = 股", :blue, :center, delta=-delta)
point(0, 鈎, "鈎 ", :black, :right, :vcenter)
point(0, 鈎 - 2c/√3, "鈎-2c/√3 ", :black, :right, :vcenter)
point(r, r, "(r,r)", :red, :center, delta=-delta)
dimension_line(√3c/2 + c/2 + 1.1delta, 鈎 - 2c/√3 - c/2 + √3c/2 + 2delta, c/2 + 1.1delta, 鈎 - 2c/√3 + √3c/2 + 2delta, "c", :green, :center, :bottom, delta=2delta, deltax=2delta)
dimension_line(b + 2delta, -1.1delta, b + (a - c)/2 + 2delta, √3(a - c)/2 - 1.1delta, "b", :blue, :left, deltax=3delta)
plot!(xlims=(-28delta, 股 + 15delta), ylims=(-8delta, 鈎 + 5delta))
end
end;
draw(100, true)