六四 埼玉県加須市不動岡 総願寺 慶應2年(1866)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:楕円,長方形,対角線
#Julia #SymPy #算額 #和算 #数学
長方形の中に対角線を引き,分割された区画に,合同な楕円を 4 個容れる。楕円の短径が 1 寸のとき,長径はいかほどか。

注:対角線を引いてできる三角形のうち,長方形の短辺を一辺とする三角形は正三角形である。
二等辺三角形に内接する楕円の長径,短径については算法助術の公式97による(「和算の心(005)」参照)。
長方形の中心を原点とし,長方形の長辺,短辺を \(2a, 2b\) とする。
正三角形の底辺と高さは,\(2b, \sqrt{3}b\)
二等辺正三角形の底辺と高さは,\(2a, b\)
以上に基づき,
(1) 2 つの楕円の長径を求め,それが等しいこと
(2) a, b の関係式
の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, side_a::positive, height::positive, q::positive
p = side_a*sqrt( (height - 2*q)/height)/2
p1 = p(side_a => 2b, height => √Sym(3)b);
p1 |> println
3^(3/4)*sqrt(b)*sqrt(sqrt(3)*b - 2*q)/3
p2 = p(side_a => 2a, height => b)
p2 |> println
a*sqrt(b - 2*q)/sqrt(b)
eq1 = p1 - p2
eq2 = 4b^2 - (a^2 + b^2);
res = solve([eq1, eq2], (a, b))[1]
(q*(-1 + 3*sqrt(3)), q*(9 - sqrt(3))/3)
@syms q
side_a = 2q*(9 - √Sym(3))/3
height = √Sym(3)side_a/2
p = side_a*sqrt( (height - 2*q)/height)/2 |> simplify
p |> println
3^(3/4)*q*sqrt(-12 + 10*sqrt(3))/3
手計算で簡約化すると,以下のように若干簡単になる。
p = q*sqrt(10 - 4*sqrt(Sym(3)))
p |> println
q*sqrt(10 - 4*sqrt(3))
長半径 \(p\) は短半径 \(q\) の \(\sqrt{10 - 4\sqrt{3}}\) 倍である。
短径が 1 寸のとき,長径は \(\sqrt{10 - 4\sqrt{3}} = 1.7526542071168778\) 寸である。
描画関数プログラムのソースを見る
function draw(q, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(a, b) = (q*(-1 + 3√3), q*(9 - √3)/3)
p = q*sqrt(10 - 4√3)
@printf("a = %g; b = %g; q = %g; p = %g\n", a, b, q, p)
plot([a, a, -a, -a, a], [-b, b, b, -b, -b], color=:blue, lw=0.5)
segment(a, b, -a, -b, :magenta)
segment(-a, b, a, -b, :magenta)
ellipse(a - q, 0, q, p, color=:red)
ellipse(q - a, 0, q, p, color=:red)
ellipse(0, q - b, p, q, color=:green)
ellipse(0, b - q, p, q, color=:green)
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(a - q, 0, "(a-q,0)", :red, :center, delta=-delta/2)
point(0, b - q, "(0,b-q,0)", :green, :center, delta=-delta/2)
point(a, 0, " a", :red, :left, :bottom, delta=delta/2)
point(0, b, " b", :blue, :left, :bottom, delta=delta/2)
point(-0.3a, -0.5b, @sprintf(" a=%g, b=%g\np=%g, q=%g", a, b, p, q), :black, mark=false)
end
end;
以下のアイコンをクリックして応援してください