裏 RjpWiki

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

算額(その1590)

2025年02月04日 | Julia

算額(その1590)

秋田県角館町熊野神社 嘉永2年(1849)

秋田県仙北市角館町西長野 熊野神社 嘉永2年(1849)
http://www.wasan.jp/akita/kakunodatekumano1.html

深川英俊,トニー・ロスマン:聖なる数学:算額,p. 109,森北出版株式会社,2010年4月22日.

キーワード:円,内接三角形
#Julia, #SymPy, #算額, #和算, #数学

外円の中に三角形 ABC が内接している。頂点 C から対辺 BC に垂線 CH を下ろす。BC, AC, CH が与えられたとき,外円の直径を求める術を述べよ。

「算法叙述の公式25」h = a*b/2r の式変形である。

外円の半径を r
BC, AC, CH を a, b, h
とおく。

C から外接円の中心 O を通る補助線を引き,円周上の交点を D とする。
∠HBC = ∠ADC なので,△HBC ∽ △ADC である。
h/a = b/DC = b/2r = sin(α)
よって,r = a*b/2h である。

a = 5, b = 8, h = 4 のとき,r = 5*8/(2*4) = 5 である。

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

琴平町 うどん吉田屋

2025年02月04日 | さぬきうどん

琴平町 うどん 吉田屋
かやくうどん
やや平べったい,乾麺かな?こしはある

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

算額(その1589)

2025年02月04日 | Julia

算額(その1589)

江戸 愛宕神社 文政13年(1830)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 108,森北出版株式会社,2010年4月22日.

キーワード:正方形4個
#Julia, #SymPy, #算額, #和算, #数学

辺の長さが a, b, c, d の 4 個の正方形が頂点を共有して図のように並んでいる。
a, b, c が与えられたとき,d を求める術を述べよ。

この特殊な場合が左右対称な「算額(その657)」である。

思いつくのは,第二余弦定理の適用であるが,β = π - α ではあるが,変数の個数が多くて,以下の連立方程式は解けなかった。

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

using SymPy
@syms a::positive, b::positive, c::positive, d::positive,
      α::positive, β::positive
eq1 = b^2 + d^2 - 2b*d*cos(α) - a^2
eq2 = b^2 + d^2 - 2b*d*cos(β) - c^2
res = solve([eq1, eq2], (c, d))

    2-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
     (sqrt(a^2 + (b*cos(α) - sqrt(a^2 + b^2*cos(α)^2 - b^2))*(2*b*cos(α) - 2*b*cos(β))), b*cos(α) - sqrt(a^2 + b^2*cos(α)^2 - b^2))
     (sqrt(a^2 + (b*cos(α) + sqrt(a^2 + b^2*cos(α)^2 - b^2))*(2*b*cos(α) - 2*b*cos(β))), b*cos(α) + sqrt(a^2 + b^2*cos(α)^2 - b^2))

補助線を引くと,cos(α) は CX/BC で,CX = x とおくと,x/d である。cos(β) は -x/d。
これらを代入して,以下の連立方程式を解いて d, x を求めると a, b, c を含む式として解が得られる。

@syms x
eq11 = eq1(d*cos(α) => x)
eq11 |> println

    -a^2 + b^2 - 2*b*x + d^2

eq12 = eq2(d*cos(β) => -x)
eq12 |> println

    b^2 + 2*b*x - c^2 + d^2

res = solve([eq11, eq12], (d, x))[1]

    (sqrt(2)*sqrt(a^2 - 2*b^2 + c^2)/2, -(a - c)*(a + c)/(4*b))

# d
res[1] |> println

    sqrt(2)*sqrt(a^2 - 2*b^2 + c^2)/2

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

算額(その1588)

2025年02月04日 | Julia

算額(その1588)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 107,森北出版株式会社,2010年4月22日.

キーワード:
#Julia, #SymPy, #算額, #和算, #数学

扇面に大円 2 個を容れ,大円の共通接線と扇端に接するように小円 1 個を容れる。弦の長さと小円の直径が与えられたとき,大円の直径はいかほどか。

注1:深川は「弦の長さが与えられたとき大円と小円の直径を求めよ」と書きながら,弦の長さの他に小円の直径も与えられたとして大円の直径を求めている。
注2:問題では扇の開いた角度に関しては条件がない。図はそのようにはなっていないが,「大円が扇骨に接する」ようにしてもよいだろう。ここでは,開いた角度を 120° で描いた。また,要から地紙までの長さ(骨の見える部分の長さ)にも指定はないが,算額の図では大円と接するように描いている。

扇長(要から扇端まで)を R
弦の長さを d
小円の半径と中心座標を r2, (0, R - r2)
大円の半径と中心座標を r1, (r1, R - 2r2 - r1)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms d::positive, t::positive, R::positive, r1::positive, r2::positive
eq1 = (d/2)^2 + (R - 2r2)^2 - R^2
eq2 = r1^2 + (R - 2r2 - r1)^2 - (R - r1)^2
res = solve([eq1, eq2], (r1, R))[1];

# r1
res[1] |> println
res[1](d => 3.62438, r2 => 0.34/2) |> println

    -2*r2 + sqrt(d^2 + 16*r2^2)/2
    1.50380926239674

弦の長さが 3.62438,小円の半径が 0.34/2 のとき,大円の半径は 1.50380926239674 である。

# R
res[2] |> println
res[2](d => 3.62438, r2 => 0.34/2) |> println

    (d^2 + 16*r2^2)/(16*r2)
    4.99945970014706

同じく,扇長は 4.99945970014706 である。

弦の長さと小円の直径がずいぶんと半端な数なのは,扇長がきれいな数(ほとんど 5)になるための条件なのであろう。
大円の半径もある程度きれいな数であるが,扇長ほどの綺麗さではない。もとの算額は扇長の方を求めていたのかな?

算額・和算では,注目するパラメータだけを求めさせる問題が多いが,連立方程式を解くという方法では,このような発見もあるんだなあ。深川は,気づいていただろうか。

function draw(d, r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = -2*r2 + sqrt(d^2 + 16*r2^2)/2
    R = (d^2 + 16*r2^2)/(16*r2)
    R2 = 0.3R
    y = R - 2r2
    x = sqrt(R^2 - y^2)
    (x0, y0) = R.*(cosd(30), sind(30))
    plot([-x0, 0, x0], [y0, 0, y0], color=:black, lw=0.5)
    circle(0, 0, R, beginangle=30, endangle=150)
    circle(0, 0, R - 2r1, beginangle=30, endangle=150)
    circle(0, R - r2, r2, :green)
    circle2(r1, R - 2r2 - r1, r1, :blue)
    segment(-x, y, x, y, :orange)
    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)
        dimension_line(2delta, -2delta, x0 + 2delta, y0 - 2delta, " R", :black, :center, delta=-2delta)
        dimension_line(-x, R - 2r2 - 2delta, x, R - 2r2 - 2delta, "d", :black, :center, delta=-3delta)
        point(r1, R - 2r2 - r1, "大円:r1,(r1,R-2r2-r1)", :blue, :center, delta=-delta)
        point(0, R - r2, "小円:r2,(0,R-r2)", :blue, :left, :bottom, delta=3delta)
    end
end;

draw(3.62438, 0.34/2, true)

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

算額(その1587)

2025年02月04日 | Julia

算額(その1587)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 105,森北出版株式会社,2010年4月22日.

キーワード:円の区分法
#Julia, #SymPy, #算額, #和算, #数学

直径が 2r = 100m の円形の畑がある。この畑を図のように長さが t の線分で分割し,面積を 5 等分したい。その 1 つは辺の長さが d の正方形である。円周率を 3.16(円積率が 0.79)として,t, d を求める術を述べよ。

以下の連立方程式を解く。

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

using SymPy
@syms d, t, r, 円周率, S
#円周率 = 3.16
eq1 = (t - d/2)^2 + (d/2)^2 - r^2
eq2 = d^2 - 円周率*r^2/5
eq3 = S - d^2;
res = solve([eq1, eq2, eq3], (d, t, S))[4]  # 3 of 4

    (sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10)), sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2), r^2*円周率/5)

# d
res[1] |> println
res[1](円周率 => 3.16, r => 50).evalf() |> println
res[1](円周率 => π, r => 50).evalf() |> println

    sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10))
    39.7492138287036
    39.6332729760601

# t
res[2] |> println
res[2](円周率 => 3.16, r => 50) |> println
res[2](円周率 => π, r => 50).evalf() |> println

    sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2)
    65.7548859021696
    65.7219838704568

# S
res[3] |> println
res[3](円周率 => 3.16, r => 50) |> println
res[3](円周率 => π, r => 50).evalf() |> println

    r^2*円周率/5
    1580.00000000000
    1570.79632679490

function draw(r, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    円周率 = 3.16
    d = sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10))
    t = sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2)
    plot()
    circle(0, 0, r)
    segment(-d/2, d/2, t - d/2, d/2, :blue)
    segment(-d/2, -d/2, -d/2, t - d/2, :blue)
    segment(d/2, -d/2, - t + d/2, -d/2, :blue)
    segment(d/2, d/2, d/2, - t + d/2, :blue)
    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(-d/2, d/2, "(-d/2,d/2) ", :blue, :right, :vcenter)
        point(d/2, d/2, "(d/2,d/2) ", :blue, :center, :bottom, delta=delta/2)
        point(t - d/2, d/2, "(t-d/2,d/2)", :blue, :right, delta=-delta/2)
        point(0, r, "r", :red, :center, :bottom, delta=delta/2)
    end
end;

draw(100/2, true)

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

今年は来ました

2025年02月04日 | 写真

ミカン・レストラン:メジロ様ご来店

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

琴平町 宗家 金毘羅饂飩 狸屋

2025年02月03日 | さぬきうどん

琴平町 宗家 金毘羅饂飩 狸屋 レストラン 狸屋
雰囲気のある店
「金比羅饂飩」がいちおしメニュー
中細麺

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

算額(その1586)

2025年02月03日 | Julia

算額(その1586)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 104,森北出版株式会社,2010年4月22日.

キーワード:直角三角形の区分法
#Julia, #SymPy, #算額, #和算, #数学

AC = 30m,BC = 40m の直角三角形状の畑がある。この畑に,幅が 2 メートルのあぜ道 DEFGHIJ を残りの面積が等しくなるように作りたい。BE, DE, HC, JC, AI, FG の長さを求めよ。

A の座標を (Ax, Ay) などとし,A ~ J までの合計 20 変数と,面積を S とおき,以下の連立方程式を解く。
いくつかの変数値は自明であるが,方程式の本数としては 7 本,変数は Dy, Ex, Fy, Hx, Iy, Jy, S の 7 個なので,過不足ない。

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

using SymPy
@syms Ax, Bx, Cx, Dx, Ex, Fx, Gx, Hx, Ix, Jx,
      Ay, By, Cy, Dy, Ey, Fy, Gy, Hy, Iy, Jy,
      S
Ax = Ix = Jx = Cx = 40
Ay = 30
Dx = Ex
Fx = Gx = Hx
Bx = By = Ey = Hy = Cy = 0
Gy = Iy
eq1 = Hx - Ex - 2
eq2 = Iy - Jy - 2
eq3 = (30*40//2 - 2(Ix - Gx) - ((Dy - Ey) + (Fy - Hy)))/3 - S
eq4 = (Dy - Ey)/(Ex - Bx) - 3//4
eq5 = (Ay - Fy)/(Cx - Hx) - 3//4
eq6 = ((Fy - Gy)+(Ay - Iy))*(Ix - Gx)/2 - S
eq7 = (Ex - Bx)*(Dy - Ey)/2 - S;
res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7],
        (Dy, Ex, Fy, Hx, Iy, Jy, S))[2]  # 2 of 2

    (1/6 + sqrt(9406)/6, 2/9 + 2*sqrt(9406)/9, 5/3 + sqrt(9406)/6, 20/9 + 2*sqrt(9406)/9, sqrt(9406)/24 + 107/12, sqrt(9406)/24 + 83/12, sqrt(9406)/27 + 9407/54)

このあと,該当する線分の長さは座標点から計算される。

3 区画の面積 = 177.79572351294942
BE = Ex - Bx = 21.77434107769659
DE = Dy - By = 16.330755808272443
HC = Cx - Hx = 16.22565892230341
JC = Jy - Cy = 10.95768895206811
AI = Ay - Iy = 17.04231104793189
FG = Fy - Gy = 4.873066856204332

深川は以下のように解いている。
小数点以下4桁までで示しているが本文(P.104)と解答編(P.125)で四捨五入の誤りなどがあるが,正確な値は上に示したものと同じである。

@syms t
eq = 3//8*t^2 - (38 - t)*((3t + 110)/16)
BE = t = solve(eq, t)[2].evalf()
DE = (3/4)*t
CH = x = 38 - t
JC = y = (3t +110)/16
AI = 28 - y
FG = (3/4)t + (3/4)*2 - (y + 2);

(BE, 21.7743, 21.7743) |> println
(DE, 16.331, 16.331) |> println
(CH, 16.2255, 16.2257) |> println
(JC, 10.9577, 10.9576) |> println
(AI, 17.0423, 17.0424) |> println
(FG, 4.873, 4.873125) |> println

    (21.7743410776966, 21.7743, 21.7743)
    (16.3307558082724, 16.331, 16.331)
    (16.2256589223034, 16.2255, 16.2257)
    (10.9576889520681, 10.9577, 10.9576)
    (17.0423110479319, 17.0423, 17.0424)
    (4.87306685620433, 4.873, 4.873125)

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (Dy, Ex, Fy, Hx, Iy, Jy, S) = (1/6 + sqrt(9406)/6, 2/9 + 2*sqrt(9406)/9, 5/3 + sqrt(9406)/6, 20/9 + 2*sqrt(9406)/9, sqrt(9406)/24 + 107/12, sqrt(9406)/24 + 83/12, sqrt(9406)/27 + 9407/54)
    Ax = Ix = Jx = Cx = 40
    Ay = 30
    Dx = Ex
    Fx = Gx = Hx
    Bx = By = Ey = Hy = Cy = 0
    Gy = Iy
    println("3 区画の面積 = $S")
    println("BE = Ex - Bx = $(Ex - Bx)")
    println("DE = Dy - By = $(Dy - By)")
    println("HC = Cx - Hx = $(Cx - Hx)")
    println("JC = Jy - Cy = $(Jy - Cy)")
    println("AI = Ay - Iy = $(Ay - Iy)")
    println("FG = Fy - Gy = $(Fy - Gy)")
    plot([Bx, Cx, Ax, Bx], [By, Cy, Ay, By], seriestype=:shape, color=:goldenrod, fillcolor=:goldenrod, lw=0.5)
    plot!([Bx, Ex, Dx, Bx], [By, Ey, Dy, By], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    plot!([Hx, Cx, Jx, Hx, Hx], [Hy, Cy, Jy, Jy, Hy], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    plot!([Gx, Ix, Ax, Fx, Gx], [Gy, Iy, Ay, Fy, Gy], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    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")
        point(Bx, By, "B", :green, :left, delta=-delta)
        point(Cx, Cy, " C", :green, :left, delta=-delta)
        point(Dx, Dy, " D", :green, :right, :bottom, delta=delta)
        point(Ex, Ey, "E", :green, :left, delta=-delta)
        point(Fx, Fy, "F", :green, :right, :bottom, delta=delta)
        point(Gx, Gy, "G", :green, :left, delta=-delta/2)
        point(Hx, Hy, "H", :green, :left, delta=-delta)
        point(Ix, Iy, " I")
        point(Jx, Jy, " J")
        ylims!(-5delta, Ay + 5delta)
    end
end;

draw(true)

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

算額(その1585)

2025年02月03日 | Julia

算額(その1585)

愛知県名古屋市 熱田神宮 天保13年(1842)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 103,森北出版株式会社,2010年4月22日.

キーワード:円4個,接線4本
#Julia, #SymPy, #算額, #和算, #数学

左円と右円が外接しており,左円内には左小円が内接し,右円内には右小円が内接している。左円と右小円,右円と左小円の共通接線を 2 本ずつ引く。左小円と右小円の直径は,左円と右円の直径でどのように表されるか。

左円の半径と中心座標を r1, (r1, 0)
右円の半径と中心座標を r2, (2r1 + r2, 0)
左小円の半径と中心座標を r31, (r1 + r31, 0)
右小円の半径と中心座標を r32, (2r1 + r32, 0)
とおき,以下の連立方程式を解き,r31, r32 を求める。

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

using SymPy
@syms r1, r2, r31, r32
eq1 = r31/(2r1 - r31) - r2/(2r1 + r2)
eq2 = r1/(2r2 + r1) - r32/(2r2 - r32)
res = solve([eq1, eq2], (r31, r32));
res[r31] |> println
res[r32] |> println

    r1*r2/(r1 + r2)
    r1*r2/(r1 + r2)

左円と右円がどんな値をとっても,左小円の半径と,右小円の半径は等しい値 r1*r2/(r1 + r2) になる。

たとえば,
左円,右円の直径が 18, 14 のとき,左小円,右小円の直径は 7.875, 7.875 である。
左円,右円の直径が 18, 16 のとき,左小円,右小円の直径は 8.47059, 8.47059 である。
左円,右円の直径が 18, 6 のとき,左小円,右小円の直径は 4.5, 4.5 である。
左円,右円の直径が 8, 16 のとき,左小円,右小円の直径は 5.33333, 5.33333 である。
左円,右円の直径が 10, 18 のとき,左小円,右小円の直径は 6.42857, 6.42857 である。

function draw(r1, r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r31 = r32 = r1*r2/(r1 + r2)
    @printf("左円,右円の直径が %g, %g のとき,左小円,右小円の直径は %g, %g である。\n", 2r1, 2r2, 2r31, 2r32)
    p = plot()
    circle(r1, 0, r1)
    circle(2r1 + r2, 0, r2, :magenta)
    circle(2r1 - r31, 0, r31, :blue)
    circle(2r1 + r32, 0, r32, :green)
    θ1 = asind(r2/(2r1 + r2))
    abline(0, 0, tand(θ1), 0, 2r1 + 2r2)
    abline(0, 0, -tand(θ1), 0, 2r1 + 2r2)
    θ2 = asind(-r1/(r1 + 2r2))
    abline(2r1 + 2r2, 0, tand(θ2), 0, 2r1 + 2r2)
    abline(2r1 + 2r2, 0, -tand(θ2), 0, 2r1 + 2r2)
    delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
    str = @sprintf("r1=%d, r2=%d", r1, r2)
    #point(r1 + r2, max(r1, r2), str, :black, :center, :bottom, delta=delta, mark=false)
    point(2r1, max(r1, r2), str, :black, :center, :bottom, delta=delta, mark=false)
    if more
        hline!([0], color=:gray80, lw=0.5)
        vline!([0], color=:gray80, lw=0.5)
        point(r1, 0, "左円:r1,(r1,0)", :red, :center, delta=-delta)
        point(2r1 + r2, 0, " 右円:r2,(2r1+r2,0)", :magenta, :center, delta=-delta)
        point(2r1 - r31, 0, " 左小円", :blue, :center, :bottom, delta=delta)
        point(2r1 + r32, 0, " 右小円", :green, :center, :bottom, delta=delta)
    end
    return p
end;

draw(9, 7, true)

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

算額(その1584)

2025年02月03日 | Julia

算額(その1584)

福島県田村市 安倍文殊菩薩堂 明治10年(1877)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 103,森北出版株式会社,2010年4月22日.

キーワード:円6個,接線2本
#Julia, #SymPy, #算額, #和算, #数学

大円 2 個が外接しており,上の大円内に中円 2 個が内接している。2 個の中円の共通接線は上の大円の中心を通る。中円と共通接線に接する小円を容れる。また,上の大円の中心を通り,下の大円が内接する外円を描く。小円の直径を 1 としたとき,大円,中円,外円の直径はいかほどか。

外円の半径と中心座標を R, (0, r3 - R); R = 3r3/2
大円の半径と中心座標を r3, (0, r3), 0, -r3)
中円の半径と中心座標を r2, (0, r2), (0, 2r3 - r2)
小円の半径と中心座標を r1, (0, 2r3, - 2r2, -r1)
とおき,以下の連立方程式を解く。

eq2 の中に,"r3/2r3" があるのでわかるように,二本の共通接線のなす角は 60° である。

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

using SymPy
@syms R, r1, r2, r3
R = 3r3/2
eq1 = r2/(r3 - r2) - r1/(r3 - 2r2 - r1)
eq2 = r2/(r3 - r2) - r3/2r3
res = solve([eq1, eq2], (r2, r3))[1]

    (3*r1, 9*r1)

中円の直径は小円の直径の 3 倍,大円の直径は小円の直径の 9 倍である。
外円の直径は大円の直径の 3/2 倍なので,小円の 27/2 倍である。
小円の直径が 1 寸のとき,外円,大円,中円の直径はそれぞれ 27/2 寸,9 寸,3 寸 である。

function draw(r1, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r2, r3) = (3*r1, 9*r1)
    R = 3r3/2
    @printf("小円の直径が %g のとき,外円,大円,中円の直径は %g, %g, %g である。\n", 2r1, 2R, 2r3, 2r2)
    plot()
    circle22(0, r3, r3)
    circle(0, 2r3 - r2, r2, :blue)
    circle(0, r2, r2, :blue)
    circle(0, 2r3 - 2r2 - r1, r1, :green)
    circle(0, r3 - R, R, :magenta)
    segment(R*cosd(30), r3-R-R*sind(30), -r3*sind(30), r3+r3*cosd(30))
    segment(-R*cosd(30), r3-R-R*sind(30), r3*sind(30), r3+r3*cosd(30))
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
        hline!([0], color=:gray80, lw=0.3)
        vline!([0], color=:gray80, lw=0.3)
        point(0, -r3, "大円:r3,(0,-r3)", :red, :center, delta=-delta)
        point(0, r3, " 大円:r3,(0,r3)", :red, :left, :vcenter)
        point(0, 2r3 - r2, " 中円:r2,(0,2r3-r2)", :blue, :left, :vcenter)
        point(0, r2, " 中円:r2,(0,r2)", :blue, :left, :vcenter)
        point(0, 2r3 - 2r2 - r1, "   小円:r1,(0,2r3-2r2-r1)", :green, :left, :vcenter)
        point(0, r3 - R, "外円,R,(0,r3-R)", :magenta, :center, delta=-delta)
        point(R*cosd(30), r3-R-R*sind(30))
        point(-r3*sind(30), r3+r3*cosd(30))
        point(-R*cosd(30), r3-R-R*sind(30))
        point(r3*sind(30), r3+r3*cosd(30))
    end
end;

draw(1/2, true)

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

算額(その21)改訂版

2025年02月03日 | Julia

算額(その21)改訂版

本来の題意に沿った解を求めるように改訂した。

福島県田村郡三春町御木沢 厳島神社 明治18年(1885)
http://www.wasan.jp/fukusima/miharuitukusima3.html

キーワード:円5個,半円2個,長方形
#Julia, #SymPy, #算額, #和算, #数学

長方形の中に,半円 2 個,甲円 1 個,乙円 2 個,丙円 2 個を容れる。丙円の直径が与えられたとき,黒積を求める術を述べよ。

半円の半径と中心座標を R, (0, R/2)
甲円の半径と中心座標を r1, (0, 0)
丙円の半径と中心座標を r3, (R - r3, 0)
乙円の半径と中心座標を r2, (r2, 0)
とおく。

黒積は,「半径 R の円の面積の 1/8 の扇形の面積 ACB から,三角形の面積 OBC と乙円の面積の 1/2 を引いたものの 4 倍である」。

以下の連立方程式を解く。

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

using SymPy
@syms R, r1, r2, r3, 黒積

eq1 = r2^2 + r1^2 - (R - r2)^2
eq2 = (R - r3)^2 + r1^2 - (R + r3)^2
eq3 = 2r1^2 - R^2
eq4 = 4(PI*R^2/8 - r1^2/2 - PI*r2^2/2) - 黒積
res = solve([eq1, eq2, eq3, eq4], (r1, r2, R, 黒積))[3] # 3 of 3

    (4*sqrt(2)*r3, 2*r3, 8*r3, r3^2*(-64 + 24*pi))

# r1
res[1] |> println

    4*sqrt(2)*r3

# r2
res[2] |> println

    2*r3

# r3
res[3] |> println

    8*r3

# 黒積
res[4] |> println

    r3^2*(-64 + 24*pi)

黒積は,円周率の 24 倍から 64 を引き,丙円の半径の二乗を掛けることで得られる。

乙円の直径が 1 のとき,黒積は 2.84955592153876 である。

res[4](r3 => 1/2).evalf() |> println

    2.84955592153876

術は以下のようで,一致する。

円周率 = PI
丙円径 = 1
((6円周率 - 16)*丙円径^2).evalf() |> println

    2.84955592153876

function draw(r3, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r1, r2, R, 黒積) = (4*sqrt(2)*r3, 2*r3, 8*r3, r3^2*(-64 + 24*pi))
    @printf("半円の半径が %g のとき,甲円,乙円,丙円の半径は %g, %g, %g,黒積は %g である。\n", R, r1, r2, r3, 黒積)
    plot([R, R, -R, -R, R], [-r1, r1, r1, -r1, -r1], seriestype=:shape, color=:powderblue, lw=0.5, fillcolor=:powderblue)
    circlef(0, r1, R, :tomato, beginangle=180, endangle=360)
    circlef(0, -r1, R, :tomato, beginangle=0, endangle=180)
    circlef(0, 0, r1, :moccasin)
    x = [R*cosd(z) for z in 45:0.01:135]
    y = [R*sind(z) - r1 for z in 45:0.01:135]
    append!(x, reverse(x))
    append!(y, -reverse(y))
    plot!(x, y, seriestype=:shape, color=:gray60, fcolor=:gray60, lw=0.5, )
    circle2f(R - r3, 0, r3, :white)
    circle2f(r2, 0, r2, :moccasin)
    circle(0, r1, R, :black, beginangle=180, endangle=360)
    circle(0, -r1, R, :black, beginangle=0, endangle=180)
    circle(0, 0, r1, :black)
    circle2(R - r3, 0, r3, :black)
    circle2(r2, 0, r2, :black)    
    rect(-R, -r1, R, r1, :black)
    plot!([0, 0, r1, 0], [R - r1, -r1, 0, 0], color=:black, lw=0.5)
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
        hline!([0], color=:gray80, lw=0.3)
        vline!([0], color=:gray80, lw=0.3)
        point(0, r1, "半円:R,(0,R/2)", :black, :center, :bottom, delta=delta)
        point(R - r3, 0, "丙円:r2,(R-r3,0)", :black, :right, :bottom, delta=2delta, deltax=4delta)
        point(r2, 0, "乙円:r2,(r2,0)", :black, :center, delta=-delta)
        point(0, R - r1, "A", :black, :center, :bottom, delta=delta)
        point(r1, 0, "B ", :black, :right, :vcenter)
        point(0, 0, "O ", :black, :right, :vcenter)
        point(0, -r1, "C ", :black, :right, :bottom, delta=delta)
        ylims!(-r1 - 2delta, r1 + 2delta)
    end
end;

draw(1/2, true)

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

算額(その1583)

2025年02月03日 | Julia

算額(その1583)

福島県田村郡三春町御木沢 厳島神社
三春まちなか寺子屋:厳島神社新算額
https://miharukoma.com/wp-content/uploads/2018/11/12.22厳島神社-新算額.pdf
https://miharukoma.com/wp-content/uploads/2018/12/寺子屋12.22 問題解説.pdf

キーワード:円5個,半円2個,長方形
#Julia, #SymPy, #算額, #和算, #数学

長方形の中に,半円 2 個,甲円 1 個,乙円 2 個,丙円 2 個を容れる。半円の半径が 48 寸のとき,乙円,丙円の半径はいかほどか。

半円の半径と中心座標を R, (0, R/2)
甲円の半径と中心座標を r1, (0, 0)
丙円の半径と中心座標を r3, (R - r3, 0)
乙円の半径と中心座標を r2, (r2, 0)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms R, r1, r2, r3

eq1 = r2^2 + r1^2 - (R - r2)^2
eq2 = (R - r3)^2 + r1^2 - (R + r3)^2
eq3 = 2r1^2 - R^2
res = solve([eq1, eq2, eq3], (r1, r2, r3))[2]  # 2 of 2

    (sqrt(2)*R/2, R/4, R/8)

# r1
res[1] |> println

    sqrt(2)*R/2

# r2
res[2] |> println

    R/4

# r3
res[3] |> println

    R/8

甲円,乙円,丙円の半径は,半円の直径の 1/√2, 1/4, 1/8 倍である。

半円の半径が 48 寸のとき,甲円,乙円,丙円の半径は 33.94112549695428 寸, 12 寸,6 寸である。

using Colors
function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r1, r2, r3) = R .* (1/√2, 1/4, 1/8)
    @printf("半円の半径が %g のとき,甲円,乙円,丙円の半径は %g, %g, %g である。\n", R, r1, r2, r3)
    plot()
    circlef(0, r1, R, parse(Colorant, "#FFF565"), beginangle=180, endangle=360)
    circlef(0, -r1, R, parse(Colorant, "#FFF565"), beginangle=0, endangle=180)
    circlef(0, 0, r1, parse(Colorant, "#FF8B3E"))
    x = [R*cosd(z) for z in 45:0.01:135]
    y = [R*sind(z) - r1 for z in 45:0.01:135]
    append!(x, reverse(x))
    append!(y, -reverse(y))
    plot!(x, y, seriestype=:shape, color=parse(Colorant, "#FFFCC4"), fcolor=parse(Colorant, "#FFFCC4"), lw=0.5)
    circle2f(R - r3, 0, r3, parse(Colorant, "#F02F22"))
    circle2f(r2, 0, r2, parse(Colorant, "#757CF7"))
    circle(0, r1, R, :black, beginangle=180, endangle=360)
    circle(0, -r1, R, :black, beginangle=0, endangle=180)
    circle(0, 0, r1, :black)
    circle2(R - r3, 0, r3, :black)
    circle2(r2, 0, r2, :black)    
    rect(-R, -r1, R, r1, :black)
    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(0, r1, "半円:R,(0,R/2)", :black, :center, :bottom, delta=delta)
        point(R - r3, 0, "丙円:r2,(R-r3,0)", :black, :right, delta=-2delta, deltax=4delta)
        point(r2, 0, "乙円:r2,(r2,0)", :black, :center, :bottom, delta=delta)
        ylims!(-r1 - 2delta, r1 + 2delta)
    end
end;

draw(48, true)

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

算額(その1582)

2025年02月03日 | Julia

算額(その1582)

福島県田村郡三春町御木沢 厳島神社
三春まちなか寺子屋:厳島神社新算額
https://miharukoma.com/wp-content/uploads/2018/11/12.22厳島神社-新算額.pdf
https://miharukoma.com/wp-content/uploads/2018/12/寺子屋12.22 問題解説.pdf

キーワード:円4個,半円2個,長方形
#Julia, #SymPy, #算額, #和算, #数学

長方形の中に,半円 2 個,乙円 2 個,丙円 2 個を容れる。半円の半径が 48 寸のとき,乙円,丙円の半径はいかほどか。

半円の半径と中心座標を R, (0, R/2)
丙円の半径と中心座標を r3, (R - r3, 0)
乙円の半径と中心座標を r2, (r2, 0)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms R, r2, r3
eq1 = r2^2 + (R/2)^2 - (R - r2)^2
eq2 = (R - r3)^2 + (R/2)^2 - (R + r3)^2;

res = solve([eq1, eq2], (r2, r3));

# r2
res[r2] |> println

    3*R/8

# r3
res[r3] |> println

    R/16

乙円,丙円の半径は,半円の直径の 3/8, 1/16 倍である。

半円の半径が 48 寸のとき,乙円,丙円の半径は 18 寸,3 寸である。

using Colors
function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r2, r3) = (3R/8, R/16)
    @printf("半円の半径が %g のとき,乙円,丙円の半径は %g, %g である。\n", R, r2, r3)
    plot()
    circlef(0, R/2, R, parse(Colorant, "#FFF565"), beginangle=180, endangle=360)
    circlef(0, -R/2, R, parse(Colorant, "#FFF565"), beginangle=0, endangle=180)
    circle2f(R - r3, 0, r3, parse(Colorant, "#F02F22"))
    circle2f(r2, 0, r2, parse(Colorant, "#757CF7"))    
    circle(0, R/2, R, :black, beginangle=180, endangle=360)
    circle(0, -R/2, R, :black, beginangle=0, endangle=180)
    circle2(R - r3, 0, r3, :black)
    circle2(r2, 0, r2, :black)    
    rect(-R, -R/2, R, R/2, :black)
    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(0, R/2, "半円:R,(0,R/2)", :black, :center, :bottom, delta=delta/2)
        point(R - r3, 0, "丙円:r2,(R-r3,0)", :black, :right, delta=-2delta, deltax=-2delta)
        point(r2, 0, "乙円:r2,(r2,0)", :black, :center, :bottom, delta=delta/2)
        ylims!(-R/2 - 2delta, R/2 + 2delta)
    end
end;

draw(48, true)

 

 

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

算額(その1581)

2025年02月03日 | Julia

算額(その1581)

福島県田村郡三春町御木沢 厳島神社
三春まちなか寺子屋:厳島神社新算額
https://miharukoma.com/wp-content/uploads/2018/11/12.22厳島神社-新算額.pdf
https://miharukoma.com/wp-content/uploads/2018/12/寺子屋12.22 問題解説.pdf

キーワード:円4個,半円2個,長方形
#Julia, #SymPy, #算額, #和算, #数学

長方形の中に,半円 2 個,正三角形 4 個,乙円 2 個,丙円 2 個を容れる。半円の半径が 48 寸のとき,乙円,丙円の半径はいかほどか。

半円の半径と中心座標を R, (0, √3R/2)
丙円の半径と中心座標を r3, (R - r3, 0)
乙円の半径と中心座標を r2, (r2, 0)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms R, r2, r3
eq1 = (R - r3)^2 + (√Sym(3)*R/2)^2 - (R + r3)^2
eq2 = r2^2 + (√Sym(3)*R/2)^2  - (R - r2)^2;

# r2
ans_r2 = solve(eq2, r2)[1]

ans_r2 |> println

    R/8

# r3
ans_r3 = solve(eq1, r3)[1]

ans_r3 |> println

    3*R/16

乙円,丙円の半径は,半円の直径の 1/8, 3/16 倍である。

半円の半径が 48 寸のとき,乙円,丙円の半径は 6 寸,9 寸である。

using Colors
function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r2, r3) = (R/8, 3R/16)
    @printf("半円の半径が %g のとき,乙円,丙円の半径は %g, %g である。\n", R, r2, r3)
    plot()
    circlef(0, √3R/2, R, parse(Colorant, "#FF8B3E"), beginangle=180, endangle=360)
    circlef(0, -√3R/2, R, parse(Colorant, "#FF8B3E"), beginangle=0, endangle=180)
    polygon(R/2, R/√3, R/√3, 3, φ=30, color=parse(Colorant, "#FFF565"), fcolor=parse(Colorant, "#FFF565"))
    polygon(-R/2, R/√3, R/√3, 3, φ=30, color=parse(Colorant, "#FFF565"), fcolor=parse(Colorant, "#FFF565"))
    polygon(R/2, -R/√3, R/√3, 3, φ=210, color=parse(Colorant, "#FFF565"), fcolor=parse(Colorant, "#FFF565"))
    polygon(-R/2, -R/√3, R/√3, 3, φ=210, color=parse(Colorant, "#FFF565"), fcolor=parse(Colorant, "#FFF565"))
    x = [R*cosd(z) for z in 60:0.01:120]
    y = [R*sind(z) - √3R/2 for z in 60:0.01:120]
    append!(x, reverse(x))
    append!(y, -reverse(y))
    circle2f(R - r3, 0, r3, parse(Colorant, "#F02F22"))
    plot!(x, y, seriestype=:shape, color=parse(Colorant, "#FFFCC4"), fcolor=parse(Colorant, "#FFFCC4"), lw=0.5)
    circle2f(r2, 0, r2, parse(Colorant, "#757CF7"))    
    circle(0, √3R/2, R, :black, beginangle=180, endangle=360)
    circle(0, -√3R/2, R, :black, beginangle=0, endangle=180)
    circle2(R - r3, 0, r3, :black)
    circle2(r2, 0, r2, :black)    
    rect(-R, -√3R/2, R, √3R/2, :black)
    plot!([-R, 0, R], √3R/2 .* [-1, 1, -1], color=:black, lw=0.5)
    plot!([-R, 0, R], √3R/2 .* [1, -1, 1], color=:black, lw=0.5)
    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(0, √3R/2, "半円:R,(0,√3R/2)", :black, :center, :bottom, delta=delta/2)
        point(R - r3, 0, "丙円:r2\n(R-r3,0)", :black, :center, delta=-delta/2)
        point(r2, 0, "乙円:r2,(r2,0)", :black, :left, delta=-5delta)
    end
end;

draw(48, true)

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

算額(その1580)

2025年02月03日 | Julia

算額(その1580)

福島県田村郡三春町御木沢 厳島神社
三春まちなか寺子屋:厳島神社新算額
https://miharukoma.com/wp-content/uploads/2018/11/12.22厳島神社-新算額.pdf
https://miharukoma.com/wp-content/uploads/2018/12/寺子屋12.22 問題解説.pdf

キーワード:円4個,半円2個,正方形
#Julia, #SymPy, #算額, #和算, #数学

正方形の中に半円 2 個,乙円 2 個,丙円 2 個を容れる。半円の半径が 48 寸のとき,乙円,丙円の半径はいかほどか。

半円の半径と中心座標を R, (0, R)
丙円の半径と中心座標を r3, (R - r3, 0)
乙円の半径と中心座標を r2, (R - 2r3 - r2, 0)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms R::positive, r2::positive, r3::positive
eq1 = (R - r3)^2 + R^2 - (R + r3)^2
eq2 = (R - 2r3 - r2)^2 + R^2 - (R + r2)^2
res = solve([eq1, eq2], (r2, r3))[1]

    (R/12, R/4)

乙円,丙円の半径は,半円の半径の 1/12, 1/4 倍である。

半円の半径が 48 寸のとき,乙円,丙円の半径は 4 寸,12 寸である。

using Colors
function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r2, r3) = (R/12, R/4)
    @printf("半円の半径が %g のとき,乙円,丙円の半径は %g, %g である。\n", R, r2, r3)
    plot()
    circlef(0, R, R, parse(Colorant, "#FFF565"), beginangle=180, endangle=360)
    circlef(0, -R, R, parse(Colorant, "#FFF565"), beginangle=0, endangle=180)
    circle2f(R - r3, 0, r3, parse(Colorant, "#F02F22"))
    circle2f(R - 2r3 - r2, 0, r2, parse(Colorant, "#757CF7"))    
    circle(0, R, R, :black, beginangle=180, endangle=360)
    circle(0, -R, R, :black, beginangle=0, endangle=180)
    circle2(R - r3, 0, r3, :black)
    circle2(R - 2r3 - r2, 0, r2, :black)    
    rect(-R, -R, R, R, :black)
    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(0, R, "半円:R,(0,R)", :black, :center, :bottom, delta=delta/2)
        point(R - r3, 0, "丙円:r2\n(R-r3,0)", :black, :center, delta=-delta/2)
        point(R - 2r3 - r2, 0, "乙円:r2,(R-2r3-r2,0)", :black, :right, delta=-3delta)
    end
end;

draw(48, true)

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

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

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