裏 RjpWiki

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

算額(その554)

2023年12月11日 | Julia

算額(その554)

百三十六 群馬県安中市磯部 赤城神社 明治20年(1887) 

百四十八 群馬県安中市磯部 赤城神社(前者の復元) 昭和52年(1977) 
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.

群馬の算額 148−5 赤城神社 明治20年
http://takasakiwasan.web.fc2.com/gunnsann/g148-5.html

キーワード:円3個,直角三角形

直角三角形の中に交差する 2 個の等円と,交差した部分に小円が入っている。鈎,股,弦はそれぞれ 4 寸,7.2 寸,9 寸,小円の直径が 1.5 寸のとき,等円の直径はいかほどか。

等円の半径と中心座標を r1, (r1, y1), (x1, r1)
小円の半径と中心座標を r2, (x2, y2)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r1, x1::positive, y1, r2, x2, y2, 鈎, 股, 弦
x2 = (r1 + x1)/2
y2 = (y1 + r1)/2
eq1 = (x2 - x1)^2 + (y1 - y2)^2 - (r1 - r2)^2
eq2 = 鈎*r1 + 弦*r1 + 股*y1 - 鈎*股
eq3 = 鈎*x1 + 弦*r1 + 股*r1 - 鈎*股
res = solve([eq1, eq2, eq3], (r1, x1, y1));

2 組の解が得られるが,2 番目の解が適解である。

等円の半径は以下の式になる。

res[2][1] |> println

   股*鈎*(2*r2*弦*sqrt(股^2 + 鈎^2) - 4*r2*股*鈎 + 2*r2*股*sqrt(股^2 + 鈎^2) + 2*r2*鈎*sqrt(股^2 + 鈎^2) + 弦*股^2 + 弦*鈎^2 + 股^3 + 股^2*鈎 + 股*鈎^2 - 2*股*鈎*sqrt(股^2 + 鈎^2) + 鈎^3)/(弦^2*股^2 + 弦^2*鈎^2 + 2*弦*股^3 + 2*弦*股^2*鈎 + 2*弦*股*鈎^2 + 2*弦*鈎^3 + 股^4 + 2*股^3*鈎 - 2*股^2*鈎^2 + 2*股*鈎^3 + 鈎^4)

SymPy では簡約化できないが,鈎,股,弦,r2 を代入すると確かに解が得られる。

@syms r1, x1::positive, y1, r2, x2, y2, 鈎, 股, 弦
2res[2][1](鈎 => 5.4, 股 => 7.2, 弦 => 9.0, r2 => 1.5/2) |> println

   3.00000000000000

術では「(鈎 + 股 - 弦)*(弦 + 2r2)/(鈎 + 股)」とされている。

((鈎 + 股 - 弦)*(弦 + 2r2)/(鈎 + 股))(鈎 => 5.4, 股 => 7.2, 弦 => 9.0, r2 => 1.5/2) |> println

   3.00000000000000

その他のパラメータは以下の通り

   等円の直径 = 3
   r1 = 1.5;  x1 = 2.7;  y1 = 2.4;  r2 = 0.75;  x2 = 2.1;  y2 = 1.95

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (鈎, 股, 弦) = (5.4, 7.2, 9.0)
   r2 = 1.5/2
   (r1, x1, y1) = (股*鈎*(2*r2*弦*sqrt(股^2 + 鈎^2) - 4*r2*股*鈎 + 2*r2*股*sqrt(股^2 + 鈎^2) + 2*r2*鈎*sqrt(股^2 + 鈎^2) + 弦*股^2 + 弦*鈎^2 + 股^3 + 股^2*鈎 + 股*鈎^2 - 2*股*鈎*sqrt(股^2 + 鈎^2) + 鈎^3)/(弦^2*股^2 + 弦^2*鈎^2 + 2*弦*股^3 + 2*弦*股^2*鈎 + 2*弦*股*鈎^2 + 2*弦*鈎^3 + 股^4 + 2*股^3*鈎 - 2*股^2*鈎^2 + 2*股*鈎^3 + 鈎^4), 股*(-2*r2*弦^2*sqrt(股^2 + 鈎^2) + 4*r2*弦*股*鈎 - 4*r2*弦*股*sqrt(股^2 + 鈎^2) - 2*r2*弦*鈎*sqrt(股^2 + 鈎^2) + 4*r2*股^2*鈎 - 2*r2*股^2*sqrt(股^2 + 鈎^2) - 2*r2*股*鈎*sqrt(股^2 + 鈎^2) + 弦*股^2*鈎 + 2*弦*股*鈎*sqrt(股^2 + 鈎^2) + 弦*鈎^3 + 股^3*鈎 - 3*股^2*鈎^2 + 2*股^2*鈎*sqrt(股^2 + 鈎^2) + 股*鈎^3 + 鈎^4)/(弦^2*股^2 + 弦^2*鈎^2 + 2*弦*股^3 + 2*弦*股^2*鈎 + 2*弦*股*鈎^2 + 2*弦*鈎^3 + 股^4 + 2*股^3*鈎 - 2*股^2*鈎^2 + 2*股*鈎^3 + 鈎^4), 股*鈎*(4*r2*弦*鈎 + 4*r2*鈎^2 + 弦*股^2 + 弦*鈎^2 + 股^3 + 股^2*鈎 - 3*股*鈎^2 + 鈎^3)/(弦^2*股^2 + 弦^2*鈎^2 + 2*弦*股^3 + 2*弦*股^2*鈎 + 2*弦*股*鈎^2 + 2*弦*鈎^3 + 股^4 + 2*股^3*鈎 - 2*股^2*鈎^2 + 2*股*鈎^3 + 鈎^4) - 2*鈎*(弦 + 鈎)*sqrt(股^2 + 鈎^2)*(r2*弦 + r2*股 + r2*鈎 - 股*鈎)/(弦^2*股^2 + 弦^2*鈎^2 + 2*弦*股^3 + 2*弦*股^2*鈎 + 2*弦*股*鈎^2 + 2*弦*鈎^3 + 股^4 + 2*股^3*鈎 - 2*股^2*鈎^2 + 2*股*鈎^3 + 鈎^4))
   x2 = (r1 + x1)/2
   y2 = (y1 + r1)/2
   @printf("等円の直径 = %g\nr1 = %g;  x1 = %g;  y1 = %g;  r2 = %g;  x2 = %g;  y2 = %g\n", 2r1, r1, x1, y1, r2, x2, y2)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
   circle(r1, y1, r1)
   circle(x1, r1, r1)
   circle(x2, y2, r2, :blue)
   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(r1, y1, "等円:r1 \n(r1,y1) ", :red, :right, :bottom)
       point(x1, r1, " 等円:r1\n (x1,r1) ", :red, :left, :top)
       point(x2, y2, " 小円:r2,(x2,r2) ", :blue, :left, :vcenter)
       point(股, 0, "股", :black, :left, :bottom, delta=delta)
       point(0, 鈎, " 鈎", :black, :left, :bottom, delta=delta/2)
   end
end;

 

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

算額(その553)

2023年12月11日 | Julia

算額(その553)

群馬の算額 148−6 赤城神社 明治20年
http://takasakiwasan.web.fc2.com/gunnsann/g148-6.html

等脚台形の中に甲円,乙円,等円が入っている。等脚台形の下底が 16 寸,甲円の直径が 12 寸のとき,乙円の直径はいかほどか。

等脚台形の上底,下底,高さを 2b, 2a, h とおく。下底の中点を原点とする。
斜辺の長さは a + b になり,甲円との接点で a, b に内分される。
甲円の半径と中心座標を r1, (0, r1); r1 = h/2
乙円の半径と中心座標を r2, (0, r2); r2 = n/2 - r3
等円の半径と中心座標を r3, (x, r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms a::positive, b::positive, h::positive, r1::positive, r2::positive, r3::positive, x::positive
r1 = h//2
r2 = h//2 - r3
eq1 = r3/(a - x) - r1//a
eq2 = x^2 + (r1 - r3)^2 - (r1 + r3)^2
eq3 = (a - b)^2 + h^2 - (a + b)^2  # 斜辺の長さは a + b
res = solve([eq1, eq2, eq3], (r3, x, b))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (h*(2*a^2 + h^2 - h*sqrt(4*a^2 + h^2))/(4*a^2), h*(-h + sqrt(4*a^2 + h^2))/(2*a), h^2/(4*a))

(h//2 - res[1][1])(a => 16//2, h => 12) |> println

   9/2

等脚台形の下底が 16 寸,甲円の直径が 12 寸のとき,乙円の直径は 9 寸である。

その他のパラメータは以下の通り。

  乙円の直径 = 9
  a = 8;  h = 12;  r3 = 1.5;  x = 6;  r1 = 6;  r2 = 4.5

function draw(a, h, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r3, x, b) = (h*(2*a^2 + h^2 - h*sqrt(4*a^2 + h^2))/(4*a^2), h*(-h + sqrt(4*a^2 + h^2))/(2*a), h^2/(4*a))
   r1 = h//2
   r2 = h//2 - r3
   @printf("乙円の直径 = %g\na = %g;  h = %g;  r3 = %g;  x = %g;  r1 = %g;  r2 = %g\n", 2r2, a, h, r3, x, r1, r2)
   plot([a, b, -b, -a, a], [0, h, h, 0, 0], color=:black, lw=0.5)
   circle(0, r1, r1)
   circle(0, r2, r2, :blue)
   circle(0, h - r3, r3, :green)
   circle(x, r3, r3, :green)
   circle(-x, r3, r3, :green)
   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, h, " h", :black, :left, :bottom, delta=delta/2)
       point(b, h, "(b,h)", :black, :left, :bottom, delta=delta/2)
       point(a, 0, " a", :black, :left, :bottom, delta=delta/2)
       point(0, h - r3, " 等円\n h-r3", :green,  :left, :vcenter)
       point(0, r1, " 甲円\n r1=h/2", :red,  :left, :vcenter)
       point(0, r2, " 乙円\n r2=h/2-r3", :blue,  :left, :vcenter)
       point(x, r3, "等円:r3\n(x,r3)", :green, :center, delta=-delta)
       point(r1*h/(a + b), r1 + r1*(a - b)/(a + b), "接点は斜辺 a+b を \na, b に \n内分する ", :black, :right, :vcenter)
   end
end;

 

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

算額(その552)

2023年12月11日 | Julia

算額(その552)

群馬の算額 143−12 榛名神社 明治33年
http://takasakiwasan.web.fc2.com/gunnsann/g143−12.html

外円の中に弦と小円 4 個,大円 2 個を入れる。小円の直径が 1 寸のとき,外円の直径はいかほどか。

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

include("julia-source.txt");

using SymPy

@syms R::positive, r2::positive, x21::positive, x22::positive
eq1 = x21^2 + 4r2^2 - (R - r2)^2
eq2 = x21^2 + (R/2 - 2r2)^2 - (R/2 + r2)^2
eq3 = x22^2 +R^2/4 - (R/2 + r2)^2
res = solve([eq1, eq2, eq3], (R, x21, x22))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (5*r2, 2*sqrt(3)*r2, sqrt(6)*r2)

外円の半径は丙円の半径の 5 倍である。
丙円の直径が 1 寸のとき,外円の直径は 5 寸である。

その他のパラメータは以下の通り。
   R = 2.5;  x21 = 1.73205;  x22 = 1.22474;  外円の直径 = 5

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r2 = 1//2
   (R, x21, x22) = r2 .* (5, 2√3, √6)
   r1 = R/2
   @printf("R = %g;  x21 = %g;  x22 = %g;  外円の直径 = %g\n", R, x21, x22, 2R)
   plot()
   circle(0, 0, R)
   circle(0, r1, r1, :blue)
   circle(0, -r1, r1, :blue)
   circle(x21, 2r2, r2, :green)
   circle(-x21, 2r2, r2, :green)
   circle(x22, 0, r2, :green)
   circle(-x22, 0, r2, :green)
   segment(-sqrt(R^2 - r2^2), r2, sqrt(R^2 - r2^2), r2, :magenta)
   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, " 大円:r1,(0,r1)", :blue, :left, :vcenter)
       point(0, r2, " r2", :magenta, :left, :bottom, delta=delta)
       point(x21, 2r2, "小円:r2\n(x21,2r2)", :green, :center, delta=-delta)
       point(x22, 0, "x21", :green, :center, :bottom, delta=delta)
       point(R, 0, "R ", :red, :right, :bottom, delta=delta)
   end
end;

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

算額(その551)

2023年12月11日 | Julia

算額(その551)

群馬の算額 143−8 榛名神社 明治33年
http://takasakiwasan.web.fc2.com/gunnsann/g143−8.html

埼玉県加須市 医王寺 明治32年 山口正義:やまぶき4,第80号 https://yamabukiwasan.sakura.ne.jp/ymbk80.pd

円の中に甲円 3 個,乙円,丙円を 2 個ずつ入れる。丙円の直径が 7 寸のとき,乙円の直径を求めよ。

ChatGPT に以下を依頼した。

円A の半径と中心座標を 3r1, (0, 0)
円B の半径と中心座標を 2r1, (0, r1)
円C の半径と中心座標を r1, (0, 0)
円D の半径と中心座標を r1, (0, -2r1)
円E の半径と中心座標を r2, (x2, y2)
円F の半径と中心座標を r3, (2r1 - r3, r1)
r1 > r2 > r3
とする。
円の相互関係は以下の4条件が成り立つ
円A と 円E は内接する
円C と 円F は外接する
円D と 円E は外接する
円B と 円E は外接する
4つの条件を r1, r2, x2, y2, r3 を含む連立方程式で示せ。

一発で解決したわけではないが,以下の連立方程式を提示してくれた。
少し手を入れる(y2 を negative とする)必要があったが,ちゃんと解けるようだ。

でも,結局は自分で書いたほうが速い。

include("julia-source.txt");

using SymPy

@syms r1::positive, r2::positive, x2::positive, y2::negative, r3::positive
eq1 = (3r1 - r2)^2 - (x2 - 0)^2 - (y2 - 0)^2
eq2 = (r1 + r3)^2 - (2r1 - r3 - 0)^2 - (r1 - 0)^2
eq3 = (r1 + r2)^2 - (x2 - 0)^2 - (y2 + 2r1)^2
eq4 = (2r1 + r2)^2 - (x2 - 0)^2 - (y2 - r1)^2

res = solve([eq1, eq2, eq3, eq4], (r1, r2, x2, y2))

   1-element Vector{NTuple{4, Sym}}:
    (3*r3/2, 9*r3/7, 18*r3/7, -27*r3/14)

2 組の解が得られるが,2 番目の解が適解である。

乙円の半径は丙円の半径の 9/7 倍である。
丙円の直径が 7 寸のとき,乙円の直径は 9 寸である。
ちなみに甲円の直径は 丙円の直径の 3/2 倍の 10.5 寸である。

その他のパラメータは以下の通り。

   r1 = 5.25;  r2 = 4.5;  x2 = 9;  y2 = -6.75
   甲円の直径 = 10.5;  乙円の直径 = 9;  丙円の直径 = 7

function draw(r2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r3 = 7//2
   (r1, r2, x2, y2) = r3 .* (3/2, 9/7, 18/7, -27/14)
   @printf("r1 = %g;  r2 = %g;  x2 = %g;  y2 = %g\n", r1, r2, x2, y2)
   @printf("甲円の直径 = %g;  乙円の直径 = %g;  丙円の直径 = %g\n", 2r1, 2r2, 2r3)
   plot()
   circle(0, 0, 3r1)
   circle(0, r1, 2r1, :blue)
   circle(0, 2r1, r1, :green)
   circle(0, 0, r1, :green)
   circle(0, -2r1, r1, :green)
   circle(x2, y2, r2, :magenta)
   circle(-x2, y2, r2, :magenta)
   circle(2r1 - r3, r1, r3, :brown)
   circle(r3 - 2r1, r1, r3, :brown)
   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, 3r1, " 3r1", :red, :left, :bottom, delta=delta/2)
       point(0, 2r1, " 2r1 甲円", :green, :left, :vcenter)
       point(0, -2r1, " -2r1", :green, :left, :vcenter)
       point(x2, y2, "乙円:r2,(x2,y2)", :magenta, :center, delta=-delta)
       point(2r1 - r3, r1, "丙円:r3\n(2r10r3,r1)", :brown, :center, delta=-delta)
   end
end;

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

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

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