70 岩手県川崎村薄衣字諏訪前(現一関市川崎町) 浪分神社 明治35年(1902)
安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:直角三角形,正六角形,斜線
#Julia #SymPy #算額 #和算 #数学
直角三角形の中に正六角形と斜線 3 本を容れる。正六角形の一辺の長さが与えられたとき,金色積(斜線 3 本で囲まれた三角形の面積)を求める術を述べよ。

A〜I の座標を \( (A_x, A_y), \dots\) のように設定し,直線AD,BF,CH の交点 J,K,L を求め,3 点の座標値から面積を計算する。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive
s3 = √Sym(3)
(Ax, Ay) = (0, 5a/2)
(Bx, By) = (0, 0)
(Cx, Cy) = (5s3*a/2, 0)
(Dx, Dy) = (s3*a/2, 0)
(Ex, Ey) = (s3*a, a/2)
(Fx, Fy) = (s3*a, 3a/2)
(Gx, Gy) = (s3*a/2, 2a)
(Hx, Hy) = (0, 3a/2)
(Ix, Iy) = (0, a/2)
(Jx, Jy) = intersection(Ax, Ay, Dx, Dy, Cx, Cy, Hx, Hy)
(Kx, Ky) = intersection(Bx, By, Fx, Fy, Cx, Cy, Hx, Hy)
(Lx, Ly) = intersection(Ax, Ay, Dx, Dy, Bx, By, Fx, Fy)
S = area([Jx Jy; Kx Ky; Lx Ly])
S |> println
675*sqrt(3)*a^2/4004
金色積は,正六角形の一辺の長さ \(a\) を二乗し,\(\sqrt{3}\cdot 675/4004\) 倍すると得られる。
正六角形の一辺の長さが 2 のとき,\(2^2\cdot \sqrt{3}\cdot 675/4004 = 1.1679663287802118\) である。
S(a => 2).evalf() |> println
1.16796632878021
この解が正しいことを示すために GeoGebra で図を描いてみた。同じ答えになった。

術は,「\(\sqrt{3}\cdot 675/4004\) の平方根をとり,正六角形の一辺の長さを掛ける」である。\(\sqrt{3}\cdot 675/4004\) まではよいのだが,その平方根をとって \(a\) を掛けるだけという大きなミスを犯している。
そもそも面積の次元は \(a^2\) なので,気づいても良さそうなものであるが...当時は次元の概念がなかったそうなので仕方ないか...
間違ってしまったもう一つの原因は,多分,正六角形の一辺の長さを 1 として計算したので \(a = a^2 = 1\) となってしまい,気づかなかったのであろう。
「\(\sqrt{3}\cdot 675/4004\) の平方根をとり,正六角形の一辺の長さを掛け,二乗する」とすれば正解である。
(sqrt(√3*675/4004)*a)^2
\(\frac{675 \cdot \sqrt{3} \cdot h^{2}}{4004}\)
描画関数プログラムのソースを見る
function draw(a, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
s3 = √3
(Ax, Ay) = (0, 5a/2)
(Bx, By) = (0, 0)
(Cx, Cy) = (5s3*a/2, 0)
(Dx, Dy) = (s3*a/2, 0)
(Ex, Ey) = (s3*a, a/2)
(Fx, Fy) = (s3*a, 3a/2)
(Gx, Gy) = (s3*a/2, 2a)
(Hx, Hy) = (0, 3a/2)
(Ix, Iy) = (0, a/2)
(Jx, Jy) = float.( intersection(Ax, Ay, Dx, Dy, Cx, Cy, Hx, Hy))
(Kx, Ky) = float.(intersection(Bx, By, Fx, Fy, Cx, Cy, Hx, Hy))
(Lx, Ly) = float.(intersection(Ax, Ay, Dx, Dy, Bx, By, Fx, Fy))
S = area([Jx Jy; Kx Ky; Lx Ly])
println("金色積 = ", S)
plot([Ax, Bx, Cx, Ax], [Ay, By, Cy, Ay], color=:green, lw=0.5)
plot!([Jx, Kx, Lx, Jx], [Jy, Ky, Ly, Jy], color=:gold, lw=0.5, seriestype=:shape, fillcolor=:gold)
segment(Ix, Iy, Dx, Dy, :green)
segment(Dx, Dy, Ex, Ey, :green)
segment(Ex, Ey, Fx, Fy, :green)
segment(Hx, Hy, Gx, Gy, :green)
segment(Ax, Ay, Dx, Dy, :magenta)
segment(Bx, By, Fx, Fy, :magenta)
segment(Cx, Cy, Hx, Hy, :magenta)
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(Ax, Ay, "A ", :magenta, :right, :bottom, delta=delta)
point(Bx, By, "B ", :magenta, :right, :bottom, delta=delta)
point(Cx, Cy, "C", :magenta, :left, :bottom, delta=delta)
point(Dx, Dy, "D", :magenta, :left, :bottom, delta=delta)
point(Ex, Ey, " E", :magenta, :left, :bottom, delta=delta)
point(Fx, Fy, " F", :magenta, :left, :bottom, delta=delta)
point(Gx, Gy, "G", :magenta, :left, :bottom, delta=delta)
point(Hx, Hy, "H ", :magenta, :right, :bottom, delta=delta)
point(Ix, Iy, "I ", :magenta, :right, :bottom, delta=delta)
point(Jx, Jy, "J", :magenta, :left, :bottom, delta=delta)
point(Kx, Ky, "K", :magenta, :center, :bottom, delta=delta)
point(Lx, Ly, " L", :magenta, :left, :vcenter)
xlims!(-5delta, Cx + 3delta)
end
end;
draw(2, true)
以下のアイコンをクリックして応援してください