裏 RjpWiki

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

算額(その484)

2023年11月02日 | Julia

算額(その484)

宮城県丸森町小斎日向 鹿島神社 明治13年

徳竹亜紀子,谷垣美保: 2021年度の算額調査,仙台高等専門学校名取キャンパス 研究紀要,第 58 号, p.7-28, 2022.
https://www.sendai-nct.ac.jp/natori-library/wp/wp-content/uploads/2022/03/kiyo2022-2.pdf

外円内に甲円,乙円,丙円が入っている。3 個の円の中心は鈎股弦(直角三角形)を作る。鈎が 3 寸,股が 4 寸のとき,外円の直径はいかほどか。

外円の半径と中心座標を r0, (0, 0); r0 = 6r2
甲円の半径と中心座標を r1, (0, r1 - r0)
乙円の半径と中心座標を r2, (r1 + r3, r1 - r0 + r2 + r3)
丙円の半径と中心座標を r3, (r1 + r3, r1 - r0)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r0::positive, r1::positive, r2::positive,
     r3::positive, 鈎::positive, 股::positive;

eq1 = r2 + r3 - 鈎
eq2 = r1 + r3 - 股
eq3 = (r1 + r2)^2 -(鈎^2 + 股^2)
eq4 = (r1 + r3)^2 + (r1 - r0)^2 - (r0 - r3)^2
solve([eq1, eq2, eq3, eq4], (r0, r1, r2, r3))

   2-element Vector{NTuple{4, Sym}}:
    (股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2, 股/2 - 鈎/2 - sqrt(股^2 + 鈎^2)/2, -股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2, 股/2 + 鈎/2 + sqrt(股^2 + 鈎^2)/2)
    (股/2 + 鈎/2 + sqrt(股^2 + 鈎^2)/2, 股/2 - 鈎/2 + sqrt(股^2 + 鈎^2)/2, -股/2 + 鈎/2 + sqrt(股^2 + 鈎^2)/2, 股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)

2 組の解が求まるが,2 番目のものが適解である。

外円の半径は 股/2 + 鈎/2 + sqrt(股^2 + 鈎^2)/2 なので,直径は 鈎 + 股 + sqrt(鈎^2 + 股^2) である。さらに,sqrt(鈎^2 + 股^2) = 弦 なので,外円の直径は鈎,股,弦の和になる
鈎 = 3, 股 = 4 のとき,弦 = 5 なので,外円の直径は 12 である。

その他,(r1, r2, r3) = ((股 - 鈎 + 弦)/2, (-股 + 鈎 + 弦)/2, (股 + 鈎 - 弦)/2)

   r0 = 6;  r1 = 3;  r2 = 2;  r3 = 1
   鈎 = 3;  股 = 4;  弦 = 5;  外円の直径 = 12

外円の直径(鈎, 股) = 鈎 + 股 + sqrt(鈎^2 + 股^2)  # 鈎,股を与えて外円の直径を求める関数
外円の直径(3, 4) |> println
外円の直径(3, 7) |> println

   12.0
   17.61577310586391

using Plots

function draw(鈎, 股, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   弦 = sqrt(鈎^2 + 股^2)
   (r0, r1, r2, r3) = ((股 + 鈎 + 弦)/2, (股 - 鈎 + 弦)/2, (-股 + 鈎 + 弦)/2, (股 + 鈎 - 弦)/2)
   @printf("r0 = %g;  r1 = %g;  r2 = %g;  r3 = %g\n",  r0, r1, r2, r3)
   @printf("鈎 = %g;  股 = %g;  弦 = %g;  外円の直径 = %g\n", 鈎, 股, 弦, 2r0)
   plot()
   circle(0, 0, r0, :black)
   circle(0, r1 - r0, r1, :blue)
   circle(r1 + r3, r1 - r0 + r2 + r3, r2, :green)
   circle(r1 + r3, r1 - r0, r3) 
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(0, r1 - r0, "甲円:r1 \n(0,r1-r0) ", :blue, :right, :vcenter)
       point(r1 + r3, r1 - r0 + r2 + r3, "乙円:r2 \n(r1+r3,r1-r0+r2+r3) ", :green, :center, :vcenter)
       point(r1 + r3, r1 - r0, "丙円:r2 \n(r1+r3,r1-r0) ", :black, :right, :vcenter)
       point(r0, 0, " r0", :black, :left, :bottom, delta=delta/3)
   else
       plot!(showaxis=false)
   end
end;

draw(3, 4, true)

   r0 = 6;  r1 = 3;  r2 = 2;  r3 = 1
   鈎 = 3;  股 = 4;  弦 = 5;  外円の直径 = 12

draw(3, 7, true)

   r0 = 8.80789;  r1 = 5.80789;  r2 = 1.80789;  r3 = 1.19211
   鈎 = 3;  股 = 7;  弦 = 7.61577;  外円の直径 = 17.6158

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

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

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