裏 RjpWiki

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

算額(その1403)

2024年11月15日 | Julia

算額(その1403)

依拠した図がでたらめなものであったので,改訂版を書いた。

算額(その1403)改訂版」を参照のこと。

三十二 一関市舞川 観福寺内地蔵堂 明治34年(1901)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市. http://www.wasan.jp/yamamura/yamamura.html
キーワード:円2個,直角三角形4個,等脚台形
#Julia, #SymPy, #算額, #和算

合同な直角三角形 4 個を組み合わせて等脚台形を作り,大円と小円を容れる。小円の直径が与えられたときに大円の直径を求める術を述べよ。

最初にいっておく。本問は条件不足であり,解けない。

できる台形の上底,下底,高さを a, 3a, b
大円の半径と中心座標を r1, (a, r1)
小円の半径と中心座標を r2, (2a - r2, b - r2)
とおく。

条件が不足しているので,小円の直径 r2 の他に台形の高さ b も与えられるものとして方程式を解く。

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

@syms a::positive, b::positive, r1::positive, r2::positive
eq1 = a + b - sqrt(a^2 + b^2) - 2r2
eq2 = r1/(b - r1) - a/sqrt(a^2 + b^2)
res = solve([eq1, eq2], (r1, a))[1];

ans_r1 = res[1]
ans_r1 |> println
ans_r1(r2 => 1/2, b => 2) |> println

   2*b*r2*(b - r2)*Abs(b - 2*r2)/(b*sqrt(b^2*(b - 2*r2)^2 + 4*r2^2*(b - r2)^2) + 2*r2*(b - r2)*Abs(b - 2*r2) - 2*r2*sqrt(b^2*(b - 2*r2)^2 + 4*r2^2*(b - r2)^2))
   0.750000000000000

ans_r1 は b > 2r2 を仮定して,以下のように簡約化できる。

ans_r1_ = 2r2*(b - r2)/b
ans_r1_ |> println

   2*r2*(b - r2)/b

ans_a も以下のようになる。

ans_a = res[2]
ans_a |> println

   2*r2*(b - r2)/(b - 2*r2)

術では「41 の平方根から 5 を引いて,小円の直径を掛ければ,大円の直径が得られる」としいているが,小円の直径が同じでも台形の高さが変われば大円の直径も変わる。一律に (√41 - 5) 倍すればよいわけではない。

r1 = 1/2 * (√41 - 5 ) = 0.7015621187164243 であるが,それは b ≒ 1.67539 のときだけである。

ans_r1_(r2 => 1/2, b => 1.67539) |> println

   0.701562024364476

ans_r1_(r2 => 1/2, b => 2) |> println

   0.545454545454546
   0.750000000000000

結論:本問は条件不足で解けない。大円の直径は小円の直径だけでは決まらない。台形の高さの条件が必要である。

function draw(r2, b, more)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 2r2*(b - r2)/b
   a  = 2r2*(b - r2)/(b - 2r2)
   println(b, " ", r1/r2) 
   @printf("r2 = %g;  r1 = %g;  factor = r1/r2 = %g;  a = %g;  b = %g\n", r2, r1, r1/r2, a, b)
   plot([2a, 2a, a, 0, 3a, 2a, a, a],
        [b, 0, b, 0, 0, b, b, 0], color=:green, lw=0.5)
   circle(a, r1, r1)
   circle(2a - r2, b - r2, r2, :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(a, r1, "大円:r1,(a,r1)", :red, :center, delta=-delta)
       point(2a - r2, b - r2, "小円:r2\n(2a-r2,b-r2)", :blue, :center, delta=-delta)
       point(a, 0, "a", :green, :center, delta=-3delta)
       point(2a, 0, "2a", :green, :center, delta=-3delta)
       point(3a, 0, "3a", :green, :center, delta=-3delta)
       point(a, b, "(a,b)", :green, :left, :bottom, delta=delta/2)
       point(2.1a, 0.8r1, "r2 = $r2\nb = $b\nr1 = $(round(r1, digits=5))", :black, :left, mark=false)
   end
end;

draw(1/2, 1.67539, true)

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

算額(その1402)

2024年11月15日 | Julia

算額(その1402)

三十二 一関市舞川 観福寺内地蔵堂 明治34年(1901)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市. http://www.wasan.jp/yamamura/yamamura.html
キーワード:3次元,球11個,高さ
#Julia, #SymPy, #算額, #和算

盤の上に 7 個の等球を互いに外接するように置き,その上に 3 個,更にその上に 1 個の等球を載せる。盤面から一番上の球の頂点までの高さはいかほどか。

 

算額(その1023)の発展版である。
算額(その1023)では,一番上に球が 1 個,それを支える下の層に球が 3 個であった。
本問は更にその下の層にそれを支える 7 個の球がある。
下3個と上1個の球は互いに外接しており,上の層にある球の中心と下の層にある球の中心の z 座標値の差は球の半径 r の 2√6/3 = sqrt(8/3) 倍である。
よって,「高さ」は,一番下の層にある球の下端から一番上の層にある球の上端までの距離である。つまり,r + 2r * 2√6/3 + r = 2.63299316185545 である。

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

@syms r, xa, ya, za, xb, yb, zb, xc, yc, zc
(xa, ya, za) = (0, 0, 0)
(xb, yb, zb) = (2r, 0, 0);

上から x-y 平面に投影した図で,一番下の層の7個の球のうちの 3 つの球の中心座標を求める。
球A の中心座標を (0, 0, 0)
球B の中心座標を (2r, 0, 0)
球C の中心座標を (xc, yc, 0)
とおく。
球C の中心座標は(図を描けば)暗算でもとまるが,あえて方程式を立てて解を求める。
3 つの球が互いに概説しているので,球A と 球C の中心間距離は,三平方の定理により以下のようになり,これを解くと xc = r, yc = √3r である。

(xc, zc) = (r, 0)
eq1 = (xc - xa)^2 + (yc - ya)^2 + (zc - za)^2- 4r^2
# yc
solve(eq1, yc)[2] |> println

   sqrt(3)*r

x-z 平面に投影した図で,球A, 球B, 球C に載っている 球D の中心座標 (r, yd, zd) を求める。

@syms r, xd, yd, zd
yc = √Sym(3)r
xd = r
yd = r/√Sym(3)
eq2 = (xd - xc)^2 + (yd - yc)^2 + (zd - zc)^2 - 4r^2
# zd
solve(eq2, zd)[2] |> println

   2*sqrt(6)*r/3

zd = 2√6r/3 = sqrt(8/3)r である。
求める「高さ」は r + 2(2√6r/3) + r = 2r(3 + 2√6)/3 で,球の直径の (3 + 2√6)/3 倍である。
球の直径が 1 寸のとき,高さは (3 + 2√6)/3 = 2.632993161855452 寸である。

術は,「球の直径の √(8/3) + 1 倍」としており,同じである。

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

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

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