裏 RjpWiki

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

算額(その148)

2023年03月06日 | Julia

算額(その148)

岐阜県 田代神社 天保12年(1841)8月
http://www.wasan.jp/gifu/tasiro.html

第3問: 正方形の中に 2 本の斜線を引き,甲正方形3個と乙正方形1個を入れる。甲正方形の一辺の長さを知って,乙正方形の一辺の長さを求めよ。

甲乙の正方形の一辺の長さを a, b とする。
⊿ABC と ⊿ADE が相似であることから,

a/(a+b) = (a+b)/(2a+b)

これを b について解く。

using SymPy
@syms a::positive, b::positive
eq = a/(a+b) - (a+b)/(2a+b)
answer = solve(eq, b)[1]
answer |> println

   a*(-1 + sqrt(5))/2

つまり,b = (√5 - 1)/2 * a であり,術文と同じになる。

using Plots
using Printf

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 rect(x1, y1, x2, y2, color=:pink)
   plot!([x1, x2, x2, x1, x1], [y1, y1, y2,  y2, y1], color=color, linewidth=0.5, seriestype=:shape, fillcolor=color)
end;

function draw(a, more)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   b = (√5 - 1)/2 * a
   plot([0, 2a + b, 2a + b, 0, 0], [0, 0, 2a + b, 2a + b, 0], color=:black, lw=0.5)
   rect(0, 0, a, a)
   rect(a + b, 0,  2a + b, a)
   rect(0, a + b, a, 2a + b)
   rect(a + b, a + b, 2a + b, 2a + b)
   rect(a, a, a + b, a + b, :slategray1)
   segment(0, a, 2a + b, 2a + b)
   segment(a, 0, 2a + b, 2a + b)
   if more == true
       point(a / 2,  a / 2, " 甲 axa")
       point(a + b / 2,  a + b / 2, " 乙 bxb")
       point(2a + b, 2a + b, " A")
       point(0, 2a + b, " B")
       point(0, a, " C")
       point(a, 2a + b, " D")
       point(a, a + b, " E")
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その147)

2023年03月06日 | Julia

算額(その147)

岐阜県養老町 田代神社 天保12年(1841)8月
http://www.wasan.jp/gifu/tasiro.html

第2問: 正方形の中に 4 個の等円を入れる。円の外部の面積(黒積と呼ぼう)が与えられたとき,円の直径を求めよ。

算額の図では等円はそれぞれが外接すると同時に正方形にも内接している。正方形には内接しないという一般の場合にも対応することもできるが,ここでは算額の意に従おう。通常は「黒積を求めよ」とするのであろうが,算額では黒積から直径を求めるように要求している。

円の半径を r とすれば,正方形の一辺の長さは 4r である。黒積を b とする。

正方形の面積は (4r)^2,4 個の円の面積の和は 4πr^2。これより,黒積は,
b = (4r)^2 - 4πr^2 である。これを r について解く。

using SymPy
@syms a::positive, r::positive, b::positive
eq = ((4r)^2 - 4PI * r^2) - b;

answer = 2solve(eq, r)[1]
answer |> println

   sqrt(b)/sqrt(4 - pi)

算額の術文では 等円の直径は sqrt(黒積/(1-π/4))/2 とされている。simplify すれば(しなくても)同じになる。

jutu = sqrt(b/(1-PI/4))/2 |> simplify
jutu |> println

   sqrt(b)/sqrt(4 - pi)

answer(b => 0.6) |> N

   0.8360435723984864195436789514102405096369794104496025447450423554972752765878972

using Plots
using Printf

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360, fill=false)
   θ = beginangle:0.1:endangle
   x = r.*cosd.(θ)
   y = r.*sind.(θ)
   if fill
       plot!(ox .+ x, oy .+ y, color=color, linewidth=0.1, seriestype=:shape, fillcolor=color)
   else
       plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
   end
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;

f(b) = sqrt(b / (4 - pi))  # 黒積から円の直径を求める関数

function draw(b, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   R = f(b)
   println("黒積が $b のとき, 正方形の一辺の長さは $(2R)")
   plot([0, 2R, 2R, 0, 0], [0, 0, 2R, 2R, 0], color=:black, linewidth=0.1, seriestype=:shape, fillcolor=:black)
   circle(R/2, R/2, R/2, :red, fill=true)
   circle(R/2, 2R - R/2, R/2, :red, fill=true)
   circle(2R - R/2, R/2, R/2, :red, fill=true)
   circle(2R - R/2, 2R - R/2, R/2, :red, fill=true)
   if more == true
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

draw(0.6, true)

   黒積が 0.6 のとき, 正方形の一辺の長さは 1.6720871447969725

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村