算額(その146)
岐阜県大垣市西外側町 大垣八幡宮 天保年間
http://www.wasan.jp/gifu/ogakihatiman.html
第1問: 等脚台形に甲乙の 2 円を入れる。その隙間に順次,丙円,丁円,戊円...を入れていく。甲円の径と最後に入れた円(黒円と呼ぼう)の径が分かっているときに,乙円から黒円まで何個の円が入ったか。
この問題は見た目は違うが,90度時計回りに回転すると本質的には算額(その36)と同じものである。
算額の「術」では,「円の個数は ⌊√(甲径 / 黒径)⌋」とされている。甲径 / 黒径 が平方数の場合には,「等脚台形」は「長方形」になる。
隙間に入れる円の半径と中心の x 座標に関して漸化式を作り,順次円を埋めていく。
漸化式の作成
using SymPy
@syms R::positive, x1::positive, r1::positive, x2::positive, r2::positive;
eq1 = x1^2 + (R - r1)^2 - (R + r1)^2
eq2 = x2^2 + (R - r2)^2 - (R + r2)^2
eq3 = (x2 - x1)^2 + (r2 - r1)^2 - (r2 + r1)^2;
res = solve([eq1, eq2, eq3], (r1, x1))
res[2][1] |> simplify |> println
res[2][2] |> simplify |> println
x2^2*(2*sqrt(R)*sqrt(r2) + R + r2)/(4*(R - r2)^2)
x2*(sqrt(R)*sqrt(r2) + R)/(R - r2)
次の円の半径 と x 座標を求める関数
function nextcircle(r2, x2, R) #
r = x2^2*(2*sqrt(R)*sqrt(r2) + R + r2)/(4*(R - r2)^2)
x = x2*(sqrt(R)*sqrt(r2) + R)/(R - r2)
return r, x
end;
using Plots
using Printf
function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
θ = beginangle:0.1:endangle
x = r.*cosd.(θ)
y = r.*sind.(θ)
plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;
function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
mark && scatter!([x], [y], color=color, markerstrokewidth=0)
annotate!(x, y, text(string, 10, position, color, vertical))
end;
function draw(R, r, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
plot()
println("個数 = $(floor(Int, sqrt(R/r)))")
circle(0, R, R, :blue)
x = 2*sqrt(R)*sqrt(r) # x1
i = 0
while true
i += 1
println("i = $i, x = $x, r = $r")
circle(x, r, r, :red)
(r, x) = nextcircle(r, x, R)
round(r, digits=10) > R && break
end
if more == true
vline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
hline!([0], color=:black, lw=0.5)
end;
draw(225, 1, true)
savefig("fig1.png");
個数 = 15
i = 1, x = 30.0, r = 1
i = 2, x = 32.142857142857146, r = 1.1479591836734695
i = 3, x = 34.61538461538462, r = 1.3313609467455623
i = 4, x = 37.500000000000014, r = 1.562500000000001
i = 5, x = 40.90909090909093, r = 1.8595041322314063
i = 6, x = 45.00000000000002, r = 2.2500000000000018
i = 7, x = 50.00000000000002, r = 2.7777777777777803
i = 8, x = 56.25000000000002, r = 3.515625000000003
i = 9, x = 64.2857142857143, r = 4.5918367346938815
i = 10, x = 75.00000000000003, r = 6.250000000000005
i = 11, x = 90.00000000000003, r = 9.000000000000007
i = 12, x = 112.50000000000003, r = 14.062500000000012
i = 13, x = 150.00000000000003, r = 25.00000000000002
i = 14, x = 225.00000000000006, r = 56.25000000000004
i = 15, x = 450.00000000000034, r = 225.00000000000034
draw(225, 2, false)
個数 = 10
i = 1, x = 42.42640687119285, r = 2
i = 2, x = 46.8427872018762, r = 2.438051903155841
i = 3, x = 52.285444912527154, r = 3.0375197218899017
i = 4, x = 59.159137903470494, r = 3.8886706638687114
i = 5, x = 68.11368676693468, r = 5.154971472204546
i = 6, x = 80.26252312010512, r = 7.157858464006006
i = 7, x = 97.68589245763658, r = 10.602815094716597
i = 8, x = 124.77119327573541, r = 17.297611857167695
i = 9, x = 172.63857263936492, r = 33.11564084773032
i = 10, x = 280.0943102542604, r = 87.16980292978876
draw(10000, 5, false)
個数 = 44
i = 1, x = 447.21359549995793, r = 5
i = 2, x = 457.44231665828704, r = 5.231336826742515
i = 3, x = 468.1498952905389, r = 5.479108111513565
i = 4, x = 479.37076393767734, r = 5.744908232954808
i = 5, x = 491.142737399151, r = 6.030529712498285
i = 6, x = 503.5074384809699, r = 6.33799351514169
i = 7, x = 516.5107897148246, r = 6.669584897295796
i = 8, x = 530.203583290577, r = 7.027895993354192
i = 9, x = 544.6421441115267, r = 7.415876628560024
i = 10, x = 559.8891042209045, r = 7.836895225632172
i = 11, x = 576.0143110525872, r = 8.294812163434667
i = 12, x = 593.0958972857454, r = 8.794068584429588
i = 13, x = 611.2215468749545, r = 9.339794484105308
i = 14, x = 630.4900005461035, r = 9.93794101971564
i = 15, x = 651.0128553214608, r = 10.595443444845037
i = 16, x = 672.9167273238959, r = 11.320423047807564
i = 17, x = 696.345866399034, r = 12.122439141275532
i = 18, x = 721.4653366451872, r = 13.01280579951383
i = 19, x = 748.4649110978014, r = 14.004993078615996
i = 20, x = 777.5638749236822, r = 15.115139489658288
i = 21, x = 809.016994374947, r = 16.362712429686827
i = 22, x = 843.1219955098877, r = 17.771367482814387
i = 23, x = 880.2290178099703, r = 19.37007809486762
i = 24, x = 920.7526791297857, r = 21.194637403116957
i = 25, x = 965.1876341291538, r = 23.289679226895828
i = 26, x = 1014.1288661817565, r = 25.71143393057737
i = 27, x = 1068.2984826283346, r = 28.531541199650054
i = 28, x = 1128.5815822186587, r = 31.842409693079276
i = 29, x = 1196.0749925986145, r = 35.76488469799439
i = 30, x = 1272.154608282929, r = 40.459433684387335
i = 31, x = 1358.5701736362862, r = 46.14282291735322
i = 32, x = 1457.5815120307168, r = 53.11359660534376
i = 33, x = 1572.1590071720439, r = 61.79209859580466
i = 34, x = 1706.2867080130786, r = 72.78535824855273
i = 35, x = 1865.435060426439, r = 86.9961991167048
i = 36, x = 2057.325407741825, r = 105.81469583350167
i = 37, x = 2293.220441761242, r = 131.4714998627906
i = 38, x = 2590.217418383382, r = 167.73065686241685
i = 39, x = 2975.5884730214275, r = 221.3531690194499
i = 40, x = 3495.672632567669, r = 305.4931788520645
i = 41, x = 4236.0679774997825, r = 448.6067977499774
i = 42, x = 5374.379909090633, r = 722.0989851809261
i = 43, x = 7349.267758474197, r = 1350.2934146437085
i = 44, x = 11618.723119204686, r = 3374.8681730185353
draw(225, 5, false)
個数 = 6
i = 1, x = 67.0820393249937, r = 5
i = 2, x = 78.8339038551072, r = 6.905315996706985
i = 3, x = 95.57784803962724, r = 10.150138928762306
i = 4, x = 121.35254915624216, r = 16.362712429686848
i = 5, x = 166.16178515947303, r = 30.677487608203194
i = 6, x = 263.434588481236, r = 77.10864712030906