裏 RjpWiki

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

算額(その69)

2022年12月21日 | Julia

算額(その69)

長野県長野市篠井 長谷観音堂 亨和3年(1803)
http://www.wasan.jp/nagano/hasekannon.html

直角三角形の中に大円と小円が斜線で区切られて入っている。大円,小円の径がそれぞれ 32 尺,24 尺である。 

鉤,股,弦を求めよ。

注:直角三角形の直角を挟む短い辺(鉤)と長い辺(股)と直角に対する辺(弦)

図のように記号を定め,方程式を解く。

using SymPy
@syms AB::positive, BC::positive, BD::positive, AD::positive, CD::positive;

各線分が整数になるように BD=12 と仮置して割合を求める。

eq1 = BD^2 + AD^2 - AB^2;
eq2 = BD^2 + CD^2 - BC^2;
eq3 = 16BC - 12AB;
eq4 = 16BD - 12AD;
eq5 = BD - 12;

solve([eq1, eq2, eq3, eq4, eq5], (AB, BC, BD, AD, CD))

   1-element Vector{NTuple{5, Sym}}:
    (20, 15, 12, 16, 9)

三角形 ABD において,AB, BD, AD の長さは実際は 20n, 12n, 16n (n は整数) であり,その中に半径 16 の円が内接している。

Ag = Ae, Bg = Bf, De = Df = 16

Ag + Bg = AB = 20n

Ae + De = Ae + 16 = AD = 16n より,Ae = 16n - 16 = Ag

Bf + Df = Bf + 16 = BD = 12n より,Bf = 12n - 16 = Bg

Ag + Bg = 28n - 32 = AB = 20n より,8n = 32 で,n = 4

すなわち,AB, BD, AD の長さは実際は 20n=80, 12n=48, 16n=64

三角形 ABD とBCD は相似比 4:3 なので BC = 80*3/4 = 60, CD = 48*3/4 = 36

以上から,直角三角形の直角を挟む短い辺(鉤)の長さは BC = 60, 長い辺(股)の長さは AB = 80,直角に対する辺(弦)の長さは AD + CD = 64 + 36 = 100 であることがわかる。

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
   θ = beginangle:0.1:endangle
   x = r.*cosd.(θ)
   y = r.*sind.(θ)
   plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
   mark && scatter!([x], [y], color=color, markerstrokewidth=0)
   annotate!(x, y, text(string, 10, position, color, vertical))
end;

function segment(x1, y1, x2, y2, color=:black; linestyle=:solid, linewidth=0.5)
   plot!([x1, x2], [y1, y2], color=color, linestyle=linestyle, linewidth=linewidth)
end

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   plot([0, 80, 80, 0], [0, 0, 60, 0], xlims=(-5, 85), ylims=(-5, 65))
   circle(48, 16, 16)
   circle(80 - 12, 36, 12)
   x3, y3 = 48 .* [0.6, 0.8]
   segment(80, 0, 80 - x3, y3, :green)
   if more
       plot!(showaxis=false)
       x1, y1 = 48 .* [0.8, 0.6]
       segment(48, 16, x1, y1)
       segment(48, 16, 48, 0)
       x2, y2 = 32 .* [0.6, 0.8]
       segment(48, 16, 80 - x2, y2)
       x4, y4 = 12 .* [0.8, 0.6]
       segment(80 - 12, 36, 80, 36)
       segment(80 - 12, 36, 80 - 12 - x4, 36 - y4)
       x5, y5 = 12 .* [0.6, 0.8]
       segment(80 - 12, 36, 80 - 12 - x5, 36 + y5)
       point(x1, y1, " e", :blue)
       point(80-x2, y2, "f  ", :blue, :right)
       point(48, 0, "g  ", :blue, :right)
       point(80-x3, y3, "D  ", :blue, :right)
       point(80 - 12 - x4, 36 - y4, "h  ", :blue, :right)
       point(80 - 12 - x5, 36 + y5, " i", :blue)
       point(80, 36, " k", :blue)
       point(0, 0, "A ", :blue, :right)
       point(80, 0, " B", :blue)
       point(80, 60, " C", :blue)
       point(48, 16, " O1\n R1=16", :blue)
       point(80-12, 36, " O2\n R2=12", :blue)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事