裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1121)改訂版

2025年01月05日 | Julia

算額(その1121)改訂版

算額(その1121)」は依拠した元図が誤っていたので,改訂版を書いた。

二十八 一関市萩荘 赤萩観音寺 天保2年(1831)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html

今有如図 03009
https://w.atwiki.jp/sangaku/pages/153.html

キーワード:円1個,半円1個,正方形,斜線2本
#Julia, #SymPy, #算額, #和算

正方形の中に斜線2本と,半円,小円を容れる。半円の直径が 1 寸のとき,小円の直径はいかほどか。

山村の提示した図は,誤っている。それに基づいて得られる答えも,算額の答,術とも違うものになってしまう。

「今有如図」の図(現地説明看板)に基づいて得た答えは算額の答,術と一致する。したがって,「今有如図」の図はもとの算額の図と同じであることがわかる。

算額の状態は悪いようなので,山村が正しい図を描けなかったのも仕方ないとは思うが...

正方形の一辺の長さを a
対角線でない方の斜線と正方形の一辺の交点座標を (0, b)
大円の半径と中心座標を r1, (r1, a)
小円の半径と中心座標を r2, (x2, r2)
とおき,以下の連立方程式を解く。

include("julia-source.txt")

using SymPy
@syms a::positive, b::positive,
      r1::positive, r2::positive, x2::positive
eq1 = dist2(0, 0, a, a, r1, a, r1)
eq2 = dist2(0, 0, a, a, x2, r2, r2)
eq3 = dist2(0, b, a, 0, r1, a, r1)
eq4 = dist2(0, b, a, 0, x2, r2, r2)
res = solve([eq1, eq2, eq3, eq4], (a, b, r2, x2))[1];

小円の半径 r2 は,大円の半径の (-2*sqrt(√2 + 2) + 2 + sqrt(2√2 + 4))/2  倍であるが,SymPy ではこれ以上簡約化できない。
大円の直径が 1 寸のとき,小円の直径は 0.4588038998538031 寸である。

(-2*sqrt(√2 + 2) + 2 + sqrt(2√2 + 4))/2

    0.4588038998538031

術は以下のとおりで,大円の直径が 1 寸のとき,小円の直径は 1 - sqrt(4 - 2√2)/2 = 0.4588038998538031 寸である。

小円の直径を表す式は SymPy で得られた式より簡潔であるが,同じ値を与えるものである。

大円径 = 1
A = 1 - sqrt(1/2)
小円径 = (1 - sqrt(A))*大円径

    0.4588038998538031

1 - sqrt(4 - 2√2)/2

    0.4588038998538031

function draw(r1, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, b, r2, x2) = (r1*(1 + sqrt(2)), r1*(-2*sqrt(sqrt(2) + 2) - sqrt(2*sqrt(2) + 4) + 4 + 3*sqrt(2)), r1*(-2*sqrt(sqrt(2) + 2) + 2 + sqrt(2*sqrt(2) + 4))/2, r1*(-sqrt(sqrt(2)/2 + 1) + 1 + sqrt(2)))
    @printf("半円の直径が %g のとき,小円の直径は %.15g である。\n", 2r1, 2r2)
    plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:magenta, lw=0.5)
    circle(r1, a, r1, beginangle=180, endangle=360)
    circle(x2, r2, r2, :blue)
    segment(0, 0, a, a, :green)
    segment(0, b, a, 0, :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, 0, " a", :magenta, :left, :bottom, delta=delta/2)
        point(0, b, "b ", :green, :right, :vcenter)
        point(r1, a, "大半円:r1,(r1,a)", :red, :center, :bottom, delta=delta/2)
        point(x2, r2, "小円:r2,(x2,r2)", :blue, :center, delta=-delta/2)
        plot!(xlims=(-5delta, a + 5delta), ylims=(-5delta, a + 5delta))
    end
end;

draw(1/2, true)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いしうす庵 レインボー店

2025年01月05日 | さぬきうどん

高松市松並町 いしうす庵 レインボー店 手打免許さぬき麺業
本当はそばの方が主体
柔らかく伸びがあるがコシもある
お正月だからと「天ぷら定食」を頼んだつもりが「さぬき定食」が来た

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その1520)

2025年01月05日 | Julia

算額(その1520)

九 岩手県水沢市佐倉河 胆沢城八幡神社 弘化2年(1845)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html

今有如図 03025
https://w.atwiki.jp/sangaku/pages/143.html

キーワード:直角三角形,正五角形,五芒星
#Julia, #SymPy, #算額, #和算

問:今有鈎股内如図設桔梗形(乃矩五角)其内面若干問得弦術如何

直訳:直角三角形の中に桔梗形を置き,その内部の五角形の一辺から弦を求める術を述べよ。

直角三角形の中に五芒星を描く。その頂点の 2 つは底辺(股)上に,もう 2 つは 斜辺(弦)上に,残りの 1 つが垂線(鈎)上にある。内部にできる正五角形の一辺の長さが与えられたとき,弦の長さを求める術を述べよ。

村山の図は本人自身も問が何を表しているのかわからなかったのであろう。図,問を自分勝手に解釈し,それに合うように術を作り変えてしまっている。本末転倒とはこのことだ。

「今有如図」はちゃんとした図を示している。この図があれば,解を求めるのは簡単である。

正五角形の一辺の長さを a とする。一般性を失わずに a = 1 と置くことができる。
正五角形が内接する円の半径を r,五芒星が内接する円の半径を R とおく。
五芒星の 5 個の頂点の x-y 座標を求める。
直角三角形の鈎,股はこれらの座標によって表すことができる。
鈎,股が得られれば,弦も求めることができる。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy
@syms R::positive, r::positive, a::positive, outer::positive,
    s18, s36, s54, ax, ay, bx, by, cx, cy, dx, dy, ex, ey
a = 1  # IJ, 一般性を失わずに,内部の正五角形の一辺の長さを 1 と置くことができる
s18 = Sym(18)
s36 = Sym(36)  
s54 = Sym(54)
r = a/2cosd(s54)

R = r*sind(s54)/sind(s18)
# outer = 2R*sind(s36)  # 五芒星が内接する正五角形の一辺の長さ

(ax, ay) = (R*cosd(s18), R*sind(s18))
(bx, by) = (0, R)
(cx, cy) = (-ax, ay)
(ex, ey) = (R*sind(s36), -R*cosd(s36))
(dx, dy) = (-ex, ey)

股 = 2ax + (ax - dx)  # FG = CA + DA' = CA + A'G
鈎 = (ay - ey) + 2(by - cy)  # FH = AA' + 2B'C

弦 = sqrt(鈎^2 + 股^2);  # GH

弦は複雑な長い式で表されるが,簡約化すると (2√5 + 5) になる。

@syms d
apart(弦,d) |> println

    2*sqrt(5) + 5

弦は内部の正五角形の一辺の長さの (2√5 + 5) 倍である。

「術」の (√20 + 5) に一致した。

function draw(more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    a = 1  # 一般性を失わずに,内部の正五角形の一辺の長さを 1 と置くことができる
    (s18, s36, s54) = (18, 36, 54)
    r = a/2cosd(s54)
    R = r*sind(s54)/sind(s18)
    # outer = 2R*sind(s36)  # 五芒星が内接する正五角形の一辺の長さ
    (ax, ay) = (R*cosd(s18), R*sind(s18))
    (bx, by) = (0, R)
    (cx, cy) = (-ax, ay)
    (ex, ey) = (R*sind(s36), -R*cosd(s36))
    (dx, dy) = (-ex, ey)
    股 = 2ax + (ax - dx)
    鈎 = (ay - ey) + 2(by - cy)
    弦 = sqrt(鈎^2 + 股^2)
    (ix, iy) = float.(intersection(cx, cy, ax, ay, bx, by, dx, dy))
    @printf("R = %g;  鈎 = %g;  股 = %g;  弦 = %g\n", R, 鈎, 股, 弦)
    plot(cx .+ [0, 股, 0, 0], dy .+ [0, 0, 鈎, 0], color=:green, lw=0.5)
    plot!([ax, cx, ex, bx, dx, ax], [ay, cy, ey, by, dy, ay], color=:blue, lw=0.5)
    circle(0, 0, R, :gray80)
    circle(0, 0, r, :gray80)
    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", :blue, :left, :bottom, delta=delta)
        point(ax, dy, " A'", :blue, :left, :bottom, delta=delta)
        segment(ax, ay, ax, dy, :gray80)
        point(bx, by, "B", :blue, :left, :bottom, delta=delta)
        point(cx, by, "B'", :blue, :right, :vcenter)
        segment(bx, by, cx, by, :gray80)
        point(cx, cy, "C ", :blue, :right, :vcenter)
        point(dx, dy, "D", :blue, :center, delta=-2delta)
        point(ex, ey, "E", :blue, :center, delta=-2delta)
        point(cx, dy, "F", :green, :center, delta=-2delta)
        point(cx + 股, dy, "G", :green, :center, delta=-2delta)
        point(cx, dy + 鈎, "H ", :green, :right, :vcenter)
        point(0, 0, "O", :blue, :center, :bottom, delta=delta)
        point(ix, iy, "I ", :blue, :right, :bottom, delta=delta)
        point(-ix, iy, " J", :blue, :left, :bottom, delta=delta)
        plot!(xlims=(cx - 10delta, cx + 股 + 5delta), ylims=(dy - 8delta, dy + 鈎 + 5delta))
    end
end;

draw(true)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村