裏 RjpWiki

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

算額(その1110)

2024年07月02日 | Julia

算額(その1110)

四十一 岩手県一関市牧沢 牧沢八幡神社 明治8年(1875)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html
キーワード:円5個,正方形,斜線2本

長方形の中に,斜線を 2 本引き,甲円 2 個,乙円 3 個を容れる。乙円の直径が 1 寸のとき,平(直平;長方形の短辺)はいかほどか。

下図に示すように,乙円が同じ大きさでも,長方形の短辺はいかようにもなる。つまり,解はない。
「答」,「術」,山村ともに,この点には一切触れていない。

要するに条件不足なので,追加条件として,たとえば長方形の長辺の長さを与えるようにすれば解は一意に求まる。
長方形の長辺,短辺を 2a, b
斜線と長辺の交点座標を (c, 0)
甲円の半径と中心座標を r1, (a - r1, y1); b/(a + c) = y1/c より,y1 = b*c/(a + c)
乙円の半径と中心座標を r2, (0, r2), (r2, b - r2)
とおき,以下の連立方程式を解く。

include("julia-source.txt")

using SymPy
@syms a::positive, b::positive, c::positive,
     r1::positive, y1::positive, r2::positive
y1 = b*c/(a + c)
eq1 = dist2(-c, 0, a, b, 0, r2, r2)
eq2 = dist2(-c, 0, a, b, a - r1, y1, r1)
eq3 = dist2(-c, 0, a, b, r2, b - r2, r2)
res = solve([eq1, eq2, eq3], (r1, b, c))[3]

   (2*r2*(a - r2)/a, 2*r2*(a - r2)*(2*a - r2)/(a*(a - 2*r2)), a - r2)

長方形の短辺の長さは 2*r2*(a - r2)*(2*a - r2)/(a*(a - 2*r2)) である。
乙円の半径 r2 が 1/2,長方形の長辺 2a が 3.2 のとき b = 3.09375 である。
これは,山村の図に近い。

a = 3.2/2
r2 = 1/2
2*r2*(a - r2)*(2*a - r2)/(a*(a - 2*r2))

   3.09375

下図は,等円の直径が 1,長方形の長辺が 5 のときのもので,短辺は 2.4 である。

ちなみに,長辺を小さくしていくとすればするほど短辺は大きくなるが,そのうち「長辺より短辺が長くなる」。「答」のように「平が 6.434 寸」などになることはありえない。乙円の直径が 1 寸であることも考えれば,そのようなことは一層ありえないということはわかりそうなものだ。

function draw(r2, a, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, b, c) = (2*r2*(a - r2)/a, 2*r2*(a - r2)*(2*a - r2)/(a*(a - 2*r2)), a - r2)
   y1 = b*c/(a + c)
   @printf("等円の直径が %g,長方形の長辺が %g のとき,短辺は %g である。\n", 2r2, 2a, b)
   plot([a, a, -a, -a, a], [0, b, b, 0, 0], color=:blue, lw=0.5)
   circle2(a - r1, y1, r1)
   circle2(r2, b - r2, r2, :green)
   circle(0, r2, r2, :green)
   segment(-a, b, c, 0, :magenta)
   segment(-c, 0, a, b, :magenta)
   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", :blue, :left, :bottom, delta=delta/2)
       point(c, 0, " c", :blue, :left, :bottom, delta=delta/2)
       point(0, b, " b", :blue, :left, :bottom, delta=delta/2)
       point(a - r1, y1, "甲円:r1,(a-r1,y1)", :red, :center, delta=-delta/2)
       point(0, r2, "乙円:r2\n(0,r2)", :green, :center, delta=-delta/2)
       point(r2, b - r2, "乙円:r2\n(r2,b-r2)", :green, :center, :bottom, delta=delta/2)
   end
end;


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1109) | トップ | 算額(その1111) »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事