裏 RjpWiki

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

算額(その1033)

2024年06月05日 | Julia

算額(その1033)

五十四 一関市市野々自鏡山 吾勝神社 天保6年(1835)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

正方形内に斜線を引き,区画された領域に大円と小円を容れる。小円の直径が 1 寸のとき,大円の直径はいかほどか。

計算しなくてもわかる。
斜線がたくさんあるので惑わされるが,必要なものだけ残すと,大円と小円を含む三角形は相似で,相似比が 2:1 である。よって,大円の直径は小円の直径の 2 倍である。

正方形の一辺の長さを 2a
大円の半径と中心座標を r1, (x1, 0)
小円の半径と中心座標を r2, (x2, a/2)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, r1::positive, x1::positive,
     r2::positive, x2::positive
eq1 = dist2(-a, -a, a, a, x1, 0, r1)
eq2 = dist2(-a, -a, a, a, x2, a/2, r2)
eq3 = dist2(-a, a, a, 0, x1, 0, r1)
eq4 = dist2(-a, a, a, 0, x2, a/2, r2)
solve([eq1, eq2, eq3, eq4], (a, r1, x1, x2))[2]  # 2 of 2

   (2*r2*(sqrt(2) + sqrt(5)), 2*r2, 2*sqrt(2)*r2, sqrt(5)*r2)

小円の直径が 1 寸のとき,大円の直径は 2 寸,正方形の一辺の長さは 7.3005630797457695 寸である。

その他のパラメータは以下のとおりである。

r2 = 0.5;  a = 3.65028;  r1 = 1;  x1 = 1.41421;  x2 = 1.11803

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r2 = 1/2
   (a, r1, x1, x2) = (2*r2*(sqrt(2) + sqrt(5)), 2*r2, 2*sqrt(2)*r2, sqrt(5)*r2)
   @printf("r2 = %g;  a = %g;  r1 = %g;  x1 = %g;  x2 = %g\n", r2, a, r1, x1, x2)
   plot([a, a, -a, -a, a], [-a, a, a, -a, -a], color=:blue, lw=0.5)
   plot!([a, -a, a, -a], [a, 0, -a, a], color=:orange, lw=0.5)
   plot!(-[a, -a, a, -a], [a, 0, -a, a], color=:orange, lw=0.5)
   circle4(x2, a/2, r2)
   circle2(x1, 0, r1, :green)
   segment(a, a, -a, -a, :blue, lw=1.5)
   segment(a, 0, -a, -a, :blue, lw=1.5)
   segment(0, a/2, a, 0, :blue, lw=1.5)
   segment(0, a/2, a, a, :blue, lw=1.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(x1, 0, "大円:r1,(x1,0)", :green, :center, delta=-delta/2)
       point(x2, a/2, " 小円:r2,(x2,a/2)", :red, :left, :vcenter)
   end
end;

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

算額(その1032)

2024年06月05日 | Julia

算額(その1032)

三十二 一関市舞川 観福寺内地蔵堂後額 明治34年(1901)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

大小の円を用いて梅鉢紋を描く。大円,小円の直径が与えられたときに大円と小円の間の距離を求めよ。

注:ここで云う距離は図の緑色の太線の長さであり,大円と小円の中心間距離から大円と小円の半径の和を差し引いたものである。

大円と小円の半径を r1, r2,中心間距離 を l とおき,以下の方程式を解く。

include("julia-source.txt");

using SymPy
@syms l::positive, r1::positive, r2::positive
eq1 = l*sind(Sym(36)) - r1
res = solve(eq1, l)[1] - (r1 + r2)
res |> println
res |> display

   -r1 + 2*sqrt(2)*r1/sqrt(5 - sqrt(5)) - r2

   

術に出てくる「八分(0.8)」は 8/10 = 4/5 である。

b = (sqrt(sqrt(Sym(8)//Sym(10)) +2) - 1)*r1 - r2

   

簡約化すると以下のようになる。

b2 = b |> simplify

   

それぞれの式の見かけは違うが,SymPy で得られた式と同じである。
大円,小円の直径がそれぞれ 5, 2.5 のとき,大円と小円の距離は 0.503254041760200 である。

res(r1 => 2.5, r2 => 1.25).evalf() |> println
b(r1 => 2.5, r2 => 1.25).evalf() |> println
b2(r1 => 2.5, r2 => 1.25).evalf() |> println

   0.503254041760200
   0.503254041760200
   0.503254041760200

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2) = (2.5, 1.25)
   中心間距離 = 2√2*r1/sqrt(5 - √5)
   @printf("大円,小円の直径がそれぞれ %g, %g のとき,大円と小円の距離は %g である。\n", 2r1, 2r2, 中心間距離  - (r1 + r2))
   plot()
   for i = 0:4
       x = 中心間距離*cosd(i*72 + 18)
       y = 中心間距離*sind(i*72 + 18)
       segment(0, 0, x, y, :green, lw=5)
       circlef(x, y, r1, :pink)
       circle(x, y, r1, :red)
   end
   circlef(0, 0, r2, :yellow)
   circle(0, 0, r2, :brown)
end;

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

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

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