裏 RjpWiki

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

算額(その1381)

2024年11月01日 | Julia

算額(その1381)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:直角三角形,菱形
#Julia, #SymPy, #算額, #和算

直角三角形の中に,甲,乙,丙の菱形を容れる。甲,乙の菱形の一辺の長さ(菱面)が 4 寸,2 寸のとき,丙菱面はいかほどか。

菱形の下にできる直角三角形の底辺と高さ(記号は図を参照)について,関係式を記述する。
甲菱面 = 鈎 - y1;  乙菱面 = 甲菱面 - y2;  丙菱面 = 乙菱面 - y3 である。

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

using SymPy

@syms 鈎::positive, 股::positive, x1::positive, y1::positive,
     x2::positive, y2::positive, x3::positive, y3::positive,
     K1::positive, K2::positive

eq1 = y1/x1 - 鈎/股
eq2 = y2/(x2 - x1) - 鈎/股
eq3 = y3/(x3 - x2) - 鈎/股
eq4 = 鈎 - y1 - sqrt(x1^2 + y1^2)
eq5 = 鈎 - y1 - y2 - sqrt((x2 - x1)^2 + y2^2)
eq6 = 鈎 - y1 - y2 - y3 - sqrt((x3 - x2)^2 + y3^2)
eq7 = 鈎 - y1 - K1
eq8 = 鈎 - y1 - y2 - K2;

res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8], (鈎, 股, x1, y1, x2, y2, x3, y3))[1]

   (K1^2/K2, K1^(5/2)*sqrt(-K1 + 2*K2)/(K2*(K1 - K2)), K1^(3/2)*sqrt(-K1 + 2*K2)/K2, K1*(K1 - K2)/K2, sqrt(K1)*sqrt(-K1 + 2*K2)*(K1^2 - K2^2)/(K2*(K1 - K2)), K1 - K2, sqrt(K1)*sqrt(-K1 + 2*K2)*(K1^2*K2 + K1^2*Abs(K1 - K2) - K2^3)/(K2*(K1*K2 + K1*Abs(K1 - K2) - K2^2 - K2*Abs(K1 - K2))), K2*Abs(K1 - K2)/(K2 + Abs(K1 - K2)))

菱面は,初項 = 甲菱面,公比 = 乙菱面/甲菱面 の等比数列になる。

問のように甲菱面 = 4 寸,乙菱面 = 2 寸とすると, 丙菱面は 1 寸にはなるが,x1 = x2 = x3 = 0 で,もはや菱形ではなく,線分である。

上に描いた図は,甲菱面 = 4,乙菱面 = 3 の場合であり,丙菱面 = 2.25 になる。

全てのパラメータは,以下の通りである。

鈎 = 5.33333;  股 = 15.0849;  x1 = 3.77124;  y1 = 1.33333;  x2 = 6.59966;  y2 = 1;  x3 = 8.72098;  y3 = 0.75

function draw(K1, K2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   Abs = abs
   (鈎, 股, x1, y1, x2, y2, x3, y3) = (K1^2/K2, K1^(5/2)*sqrt(-K1 + 2*K2)/(K2*(K1 - K2)), K1^(3/2)*sqrt(-K1 + 2*K2)/K2, K1*(K1 - K2)/K2, sqrt(K1)*sqrt(-K1 + 2*K2)*(K1^2 - K2^2)/(K2*(K1 - K2)), K1 - K2, sqrt(K1)*sqrt(-K1 + 2*K2)*(K1^2*K2 + K1^2*Abs(K1 - K2) - K2^3)/(K2*(K1*K2 + K1*Abs(K1 - K2) - K2^2 - K2*Abs(K1 - K2))), K2*Abs(K1 - K2)/(K2 + Abs(K1 - K2)))
   @printf("甲菱面 = %g;  乙菱面 = %g;  丙菱面 = %g\n", 鈎 - y1, 鈎 - y1 - y2, 鈎 - y1 - y2 - y3)
   @printf("鈎 = %g;  股 = %g;  x1 = %g;  y1 = %g;  x2 = %g;  y2 = %g;  x3 = %g;  y3 = %g\n", 鈎, 股, x1, y1, x2, y2, x3, y3)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
   segment(0, y1, x1, 0)
   segment(x1, y2, x2, 0)
   segment(x2, y3, x3, 0)
   segment(x1, 0, x1, 鈎 - y1)
   segment(x2, 0, x2, 鈎 - y1 - y2)
   segment(x3, 0, x3, 鈎 - y1 - y2 - y3)
   if more == true
       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, y1, " (0,y1)", :red, :left, :bottom)
       point(x1, y2, " (x1,y2)", :red, :left, :bottom)
       point(x2, y3, " (x2,y3)", :red, :left, :bottom)
       point(x3, 0, " (x3,0)", :red, :left, :bottom)
       point(0, 鈎, " (0,鈎)", :red, :left, :bottom)
       point(股, 0, " (股,0)", :red, :left, :bottom)
       xlims!(-5delta, 股 + 25delta)
   end
end;

draw(4, 3, true)


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

コメントを投稿

Julia」カテゴリの最新記事