以下の内容はhttps://sangaku0418.hatenablog.com/entry/2024/05/27/134807より取得しました。


算額(その1002)

番外七 埼玉県 奉納地不明 安政4年(1857)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円3個,弦,矢
#Julia #SymPy #算額 #和算 #数学


大円の中に水平な元と矢を設け,区画された領域に小円 2 個を容れる。矢と小円の直径の差が 1 寸のとき,大円の直径はいかほどか。
注:問,答,術に混乱があるが以上のように解釈し,解く。また,算額の図(下図)は矢と小円の直径の差が 0.05 寸ほどのときのものである。

大円の半径と中心座標を \(R,\ (0,\ 0)\)
小円の半径と中心座標を \(r,\ (r,\ y + r)\)
弦と \(y\) 軸の交点座標を \( (0,\ y)\)
矢は \(R - y\)
eq3 は「算法助術」の公式48

include("julia-source.txt");  # julia-source.txt ソース

using SymPy

@syms R, r, y, h, 矢, K
h = y + R
eq0 = 矢 - (R - y)
eq1 = (矢 - 2r) - K
eq2 = r^2 + (r + y)^2 - (R - r)^2
eq3 = r^2 + r*h - sqrt(R*2r^2);

res = solve([eq0, eq1, eq2, eq3], (R, 矢, r, y))[4]  # 4 of 4

    ( (sqrt(K) + K)^2/(2*K), 2*sqrt(K) + K, sqrt(K), -sqrt(K) - K/2 + 1/2)

矢と小円の直径の差が 1 寸のとき,大円の直径は 4 である。

このときの図は,算額の図(上図)とはまるで様相が違う。

K = 1
2*(sqrt(K) + K)^2/(2*K)

  4.0

ところで,矢と小円の直径の差が 0.05 のときに,算額の図と同じような図(最初の図)が描かれるが,大円の直径は 1.49721 である。
もし,この図を 1/0.05 = 20 倍にして描くと,矢と小円の直径は 1 になる。そのとき大円の直径は 29.9442 になる...
要するに,この問題は条件不足なのかな?

描画関数プログラムのソースを見る

function draw(K, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, 矢, r, y) = ( (sqrt(K) + K)^2/(2*K), 2*sqrt(K) + K, sqrt(K), -sqrt(K) - K/2 + 1/2)
   string = @sprintf("矢と小円の直径の差が %g のとき,\n大円の直径は %g である。\n(矢は %g,小円の直径は %g)\n", K, 2R, 矢, 2r)
   println(string)
   @printf("矢 = %g;  r = %g;  R = %g;  y = %g\n", 矢, r, R, y)
   plot()
   circle(0, 0, R, :blue)
   circle2(r, r + y, r, :green)
   x = sqrt(R^2 - y^2)
   segment(-x, y, x, y, :red)
   segment(0, y, 0, R, :magenta, lw=1)
   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(0, 0, "大円:R,(0,0)", :blue, :center, delta=-delta/2)
       point(r, y + r, "小円:r,(r,y+r)", :green, :center, delta=-delta/2)
       point(0, R, " R", :blue, :center, :bottom, delta=delta/2)
       point(0, y, " y", :red, :center, delta=-delta/2)
       point(0, (R + y)/2, "矢 ", :magenta, :right, delta=2delta, mark=false)
       point(0, (y - R)/2, string, :black, :left, delta=-5delta, deltax=-20delta, mark=false)
   end
end;


以下のアイコンをクリックして応援してください




以上の内容はhttps://sangaku0418.hatenablog.com/entry/2024/05/27/134807より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14