裏 RjpWiki

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

算額(その1002)

2024年05月27日 | Julia

算額(その1002)

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

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

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

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

include("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;


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

コメントを投稿

Julia」カテゴリの最新記事