裏 RjpWiki

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

算額(その1492)

2024年12月24日 | Julia

算額(その1492)

参考文献

1).  十 岩手県胆沢町 個人宅 安政2年(1855)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html

2).  今有如図 03046
https://w.atwiki.jp/sangaku/pages/190.html

キーワード:円5個,外円,弦1本,斜線2本
#Julia, #SymPy, #算額, #和算

問題文は以下のとおりである。
今有全円内如図設弦及二斜容等員四个画赤稜等円径一寸問赤積幾何

現代文にすると,「外円の中に弦と斜線を描き,隙間に等円 4 個を容れる。等円と弦,斜線に囲まれた部分の面積を求めよ。
等円は外円に内接し,弦,斜線に外接する。

参考文献 1) の山村の図は,不正確で,何を求めればよいのかさえわからず,手のつけようがない。

参考文献 2) は明確である。


図形自体は「算額(その725)」と同じであり,円と弦に囲まれた部分の面積を求めよということである。

外円の半径と中心座標を R, (0, 0)
等円の半径と中心座標を r, (x, R - 3r), (0, r - R), (0, R - r)
斜線と外円の交点座標を (x0, y0)
とおき,(R, x, x0, y0) を未知数として以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms R::positive, r::positive, x::positive, x0::positive, y0::negative
eq1 = x^2 + (R - 3r)^2 - (R - r)^2
eq2 = x0^2 + y0^2 - R^2
eq3 = x0/sqrt(x0^2 + (R - 2r - y0)^2) - r/(2R - 2r)
eq3 = dist2(0, R - 2r, x0, y0, x, R - 3r, r)
eq4 = dist2(0, R - 2r, x0, y0, 0, r - R, r)
res = solve([eq1, eq2, eq3, eq4], (R, x, x0, y0))[1]

    (r*(sqrt(17) + 17)/8, r*sqrt(-4 + sqrt(17))*(sqrt(17) + 5)/2, 4*r*sqrt(-4 + sqrt(17)), r*(-55 + 9*sqrt(17))/8)

黒積は,直角三角形の面積から扇型の面積を差し引いたもので表すことができる。
等円の直径が 1 なので,r = AC = DE = 1/2
外円の半径が R = r*(sqrt(17) + 17)/8 なので
AB = 2R - 3r
x = r*sqrt(√17 - 4)*(√17 + 5)/2
DB = sqrt(x^2 + r^2)
∠BAC = acos(r/AB)
∠BDE = acos(r/DB)
⊿ABC = AB*sin(∠BAC)*r/2
⊿DBA = x*r/2
面積 = 2*((⊿ABC - π*r^2*(∠BAC/2π)) + 2(⊿DBA - π*r^2*(∠BDE/2π)))
等円の直径が 1.0 のとき,黒積は 0.5273103412996156 である。

function draw(r, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (R, x, x0, y0) = (r*(sqrt(17) + 17)/8, r*sqrt(-4 + sqrt(17))*(sqrt(17) + 5)/2, 4*r*sqrt(-4 + sqrt(17)), r*(-55 + 9*sqrt(17))/8)
    y00 = R - 2r
    x00 = sqrt(R^2 - y00^2)
    (x01, y01) = foot(0, R - 2r, x0, y0, 0, r - R)
    (x02, y02) = foot(0, R - 2r, x0, y0, x, R - 3r)
    plot([0, 0, x01, 0, x,x02, 0], [y00, r - R, y01, y00, R - 3r, y02, y00], color=:gray90, seriestype=:shape, fillcolor=:gray90, lw=0.5)
    circle(0, 0, R, :green)
    circle2(x, R - 3r, r)
    circle22(0, r - R, r)
    segment(-x00, y00, x00, y00, :blue)
    plot!([-x0, 0, x0], [y0, y00, y0], color=:blue, lw=0.5)
    # 黒積の計算
    AB = 2R - 3r
    ∠BAC = acos(r/AB)
    BD = sqrt(x^2 + r^2)
    ∠BDE = acos(r/BD)
    ⊿ABC = AB*sin(∠BAC)*r/2
    ⊿DBE = x*r/2
    黒積 = 2*((⊿ABC - π*r^2*(∠BAC/2π)) + 2(⊿DBE - π*r^2*(∠BDE/2π)))
    println("等円の直径が $(2r) のとき,黒積は $黒積 である。")
    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, r - R, "A", :blue, :center, delta=-delta)
        point(0, y00, "B", :blue, :center, :bottom, delta=delta)
        point(x01, y01, "C", :blue, :right, delta=-delta)
        point(x, R - 3r, " D", :blue, :left, :vcenter)
        point(x02, y02, " E", :blue, :left, :vcenter, delta=-delta/2)
        point(0, 2r - R, "F ", :blue, :right, :bottom, delta=delta/2)
        point((BD - r)*sin(∠BDE), y00 - (BD - r)*cos(∠BDE), " G", :blue, :left, :vcenter, delta=delta/2)
    end
end;

draw(1/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事