裏 RjpWiki

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

算額(その598)

2023年12月30日 | Julia

算額(その598)

八五 北葛飾郡三郷町上彦川戸 香取神社 明治13年(1880)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

東京都中央区 福徳神社 令和2年(2020)
http://www.wasan.jp/tokyo/hukutoku1.html

高さ 30,底辺 42 の直角三角形を 2 本の線分で分け,面積を 3 等分する。このとき長い方の線分の長さはいくらか。

2 本の線分と斜辺の交点座標を (x1, y1), (x2, y2),高さを「鈎」,底辺を「股」とおく。

弦を底辺として考えると,赤,白,緑の三角形の高さは同じなので,面積がおなじになるためには弦は三等分しなければならない。
そうすれば,
x1,y1 は 42*(2/3), 30*(1/3) で 28, 10
x2,y2 は 42*(1/3), 30*(2/3) で 14, 20
と暗算でわかる。
線分の長さは暗算ではわからないが。√(28^2 + 10^2) と √(14^2 + 20^2) の長いほうが答え 29.732137494637012 である。

√(28^2 + 10^2), √(14^2 + 20^2) 

   (29.732137494637012, 24.413111231467404)

連立方程式を解くなら,以下のように。

include("julia-source.txt");

using SymPy

@syms 鈎::positive, 股::positive, x1::positive, y1::positive,
     x2::positive, y2::positive

S = 股*鈎/2
eq1 = 股*y1/2 - S/3
eq2 = 鈎*x2/2 - S/3
eq3 = y1/(股 - x1) - 鈎/股
eq4 = (鈎 - y2)/x2 - 鈎/股
(x1, y1, x2, y2) = solve([eq1, eq2, eq3, eq4], (x1, y1, x2, y2))

   Dict{Any, Any} with 4 entries:
     x1 => 2*股/3
     y1 => 鈎/3
     x2 => 股/3
     y2 => 2*鈎/3

(鈎, 股) = (30, 42)

   (30, 42)

(x1, y1) = (2*股/3, 鈎/3)

   (28.0, 10.0)

(x2, y2) = (股/3, 2*鈎/3)

   (14.0, 20.0)

(緑の面積, 赤の面積, 白の面積) = (股*y1/2, 鈎*x2/2, 股*鈎/2 - 股*y1/2 - 鈎*x2/2)

   (210.0, 210.0, 210.0)

線分の長さ =  (sqrt(x1^2 + y1^2), sqrt(x2^2 + y2^2))

   (29.732137494637012, 24.413111231467404)

長い方の線分の長さ = maximum(線分の長さ)

   29.732137494637012

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   @printf("(x1, y1) = (%g, %g);  (x2, y2) = (%g, %g)\n", x1, y1, x2, y2)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
   plot!([0, 股, x1, 0],  [0, 0, y1, 0], color=:green, lw=0.5, seriestype=:shape, fillcolor=:green)
   plot!([0, x2, 0, 0], [0, y2, 鈎, 0], color=:red, lw=0.5, seriestype=:shape, fillcolor=:red)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(x1, y1, " (x1, y1)", :green, :left, :vcenter)
       point(x2, y2, " (x2, y2)", :red, :left, :vcenter)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事