以下の内容はhttps://sangaku0418.hatenablog.com/entry/2025/01/27/222354より取得しました。


算額(その1564)

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)

以下のアイコンをクリックして応援してください




以上の内容はhttps://sangaku0418.hatenablog.com/entry/2025/01/27/222354より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14