裏 RjpWiki

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

算額(その314)

2023年07月05日 | Julia

算額(その314)

(4) 京都府長岡京市天神 長岡天満宮 寛政2年(1970)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.

p02-03 特集「算額」(杉浦).indd
https://www.s-coop.net/lifestage/backnumber/2011/pdf/1106_02-03.pdf

キーワード:円8個,正方形

図のように,大円と小円の間に正方形がある。大円と小円の直径はそれぞれ 5cm, 3cm である。正方形の辺の長さを求めよ。

正方形の辺の長さを 2a,右上の大円の中心座標を (x2, x2) とする。右の小円の中心座標を (a + r1, 0) とする。
以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms a::positive, x2::positive
(r1, r2) = (3/2, 5/2)
eq1 = (x2 - (a + r1))^2 + x2^2 - (r1 + r2)^2
eq2 = (sqrt(2)a + r2)^2 - 2x2^2
res = solve([eq1, eq2], (a, x2))

   1-element Vector{Tuple{Sym, Sym}}:
    (2.22326059127573, 3.99102754424210)

2res[1][1] |> println

   4.44652118255146

正方形の一辺の長さは 2 * 2.22326059127573 = 4.44652118255146 cm

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2) = (3/2, 5/2)
   (a, x2) = res[1]
   plot()
   rect(-a, -a, a, a, :red)
   circle4(x2, x2, r2, :blue)
   circle42(0, a + r1, r1, :green)
   if more
       point(a, 0, "a ", :red, :right, :bottom)
       point(a + r1, 0, " a+r1", :green, :left, :bottom)
       point(x2, x2, "(x2,x2)", :blue)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その313)

2023年07月05日 | Julia

算額(その313)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)

問題文5

図のように,円の中に順次,正六花径,正三角形,正方形,正三角形,正方形をいれる。
最も内側の正方形の上辺から,その正方形が内接する正三角形の頂点までの距離(隅中径; 図の AB)が 1.39883135702…であるとき,それぞれの長さを求めよ。

内側の図形から順次長さを求める。

include("julia-source.txt");

using SymPy

@syms 隅中径::positive
隅中径 = Sym(1.39883135702)
隅中径 |> println

   1.39883135702000

中方平面(小さい正方形の一辺)
@syms 中方平面::positive
eq1 = 隅中径/(中方平面/2) - sqrt(Sym(3))
中方平面 = solve(eq1, 中方平面)[1]
中方平面 = 2隅中径 / sqrt(Sym(3))
中方平面.evalf() |> println

   1.61523132105277

小三角面(小さい正三角形の一辺)
@syms 小三角面::positive
小三角面 = (隅中径 + 中方平面) * 2/sqrt(Sym(3))
小三角面.evalf() |> println

   3.48033979707944

小円ノ廻(小円の円周)
@syms 小円ノ廻::positive, 小円ノ径::positive
小円ノ径 = 小三角面/2 * (2/sqrt(Sym(3))) * 2
小円ノ廻 = 小円ノ径 * PI
小円ノ廻.evalf() |> println

   12.6252762225235

大方平面(大きい正方形の一辺 =  小円ノ径)
@syms 大方平面
大方平面 = 小円ノ径
大方平面.evalf() |> println

   4.01875023743036

大三角面(大きい正三角形の一辺)
@syms 大三角面
eq2 = (大方平面/2 * sqrt(Sym(3)) + 大方平面) * 2/sqrt(Sym(3)) - 大三角面
大三角面 = solve(eq2, 大三角面)[1]
大三角面 |> println

   8.65920330020295

六角ノ面(正六角形の一辺)
@syms 六角ノ面
六角ノ面 = 大三角面/2 * 2/sqrt(Sym(3))
六角ノ面.evalf() |> println

   4.99939335633987

矢(外円と正六角形の一辺が作る弦と外円との距離)
@syms 矢
矢 = 六角ノ面 - (六角ノ面/2 * sqrt(Sym(3)))
矢.evalf() |> println

   0.669791706238393

同外径(大三角面外径;大きい正三角形の外接円の直径)
@syms 同外径
同外径 = 2六角ノ面
同外径.evalf() |> println

   9.99878671267973

外円ノ廻(外円の円周)
@syms 外円ノ廻
外円ノ廻 = 同外径 * PI
外円ノ廻.evalf() |> println

   31.4121148813659

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 9.99878671267973 / 2  # 外円の半径
   x = zeros(7)
   y = zeros(7)
   for i = 1:7
       θ = 60(i - 1) + 30
       x[i] = r*cosd(θ)
       y[i] = r*sind(θ)
   end
   plot()
   circle(0, 0, r)
   plot!(x, y, color=:blue, lw=0.5)
   plot!(x[[2, 4, 6, 2]], y[[2, 4, 6, 2]], color=:green, lw=0.5)
   rect(大方平面/2, y[6], -大方平面/2, y[6] + 大方平面, :orange)
   delta = y[6] + 大方平面/2
   circle(0, delta, 小円ノ径/2)
   factor = 小円ノ径 / 同外径
   plot!(factor .* x[[2, 4, 6, 2]], factor .* y[[2, 4, 6, 2]] .+ delta,
       color=:green, lw=0.5)
   rect(中方平面/2, factor * y[6] + delta,
       -中方平面/2, factor * y[6] + delta + 中方平面, :magenta)
   if more
       point(0, 小円ノ径/2 + delta, " A", :red, :left, :bottom)
       point(0, factor * y[6] + delta + 中方平面, " B", :red, :left, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

ヤマユリの一番花

2023年07月04日 | 雑感

二年ぶりにたくさん蕾がついた。嬉しさと,寂しさ。ないまぜ。

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

半夏生--七十二候

2023年07月04日 | 雑感

https://www.543life.com/72seasons/hangesyouzu.html

半夏生 ハンゲショウズ と読むのは初めて知った(?)

田植えが終わったお疲れ様パーティーで,地方によっては団子やタコを食べる慣わしがあるとか。先日も,スーパーへ行ったらタコが推しだったとか聞いた。

植物の世界では,文字通り「ハンゲショウ」というのがある。「ランマン」で出たかな?(見てないので未確認)

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

マイナンバーカードの不具合

2023年07月04日 | 雑感

不具合に関わらず,マイナンバーカード関連の政府発の記事で,必ず,イラストに女性のイラストが付いたマイナンバーカードのイメージ図がつくが,あれは,逆差別か?

そもそも,イメージ図なんぞ不要と思うし。記事は大抵の場合,マイナスイメージのことが多いので,女性のイラストを使うのはどうだかなあと思う次第。

たまには,髭面の汚いおじさんの図でも使うと,親しみが湧くな(んなわけない)。

 

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

算額(その312)

2023年07月04日 | Julia

算額(その312)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県菰野町 広幡神社 嘉永5年(1852)

問題
半円の中に円弧があり,半円と円弧に挟まれた領域にいくつかの円が挟まれている。半円の直径,丙円,丁円の直径が与えられたとき,戊円の直径はいくつか。



円弧の半径と中心座標を r0, (0, y0)
半円の半径と中心座標を r,  (0, 0)
丙円の半径と中心座標を r1, (x1, y1)
丁円の半径と中心座標を r2, (x2, y2)
戊円の半径と中心座標を r3, (x3, y3)
として,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r0::positive, y0::positive, r::positive,
   r1::positive, x1::positive, y1::negative,
   r2::positive, x2::positive, y2::negative,
   r3::positive, x3::positive, y3::negative;

(r, r1, r2) = (50, 10, 5)
eq1 = x1 ^2 + (y0 - y1)^2 - (r0 + r1)^2
eq2 = x2 ^2 + (y0 - y2)^2 - (r0 + r2)^2
eq3 = x3 ^2 + (y0 - y3)^2 - (r0 + r3)^2
eq4 = x1^2 + y1^2 - (r - r1)^2
eq5 = x2^2 + y2^2 - (r - r2)^2
eq6 = x3^2 + y3^2 - (r - r3)^2
eq7 = (x2 - x1)^2 + (y2 - y1)^2 - (r2 + r1)^2
eq8 = (x3 - x2)^2 + (y3 - y2)^2 - (r3 + r2)^2
eq9 = r^2 + y0^2 - r0^2;

# solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9])

連立方程式が複雑すぎて solve() では解けないので,nlsolve() で数値解を求める。

println(eq1, ",  # eq1")
println(eq2, ",  # eq2")
println(eq3, ",  # eq3")
println(eq4, ",  # eq4")
println(eq5, ",  # eq5")
println(eq6, ",  # eq6")
println(eq7, ",  # eq7")
println(eq8, ",  # eq8")
println(eq9, ",  # eq9")

   x1^2 - (r0 + 10)^2 + (y0 - y1)^2,  # eq1
   x2^2 - (r0 + 5)^2 + (y0 - y2)^2,  # eq2
   x3^2 - (r0 + r3)^2 + (y0 - y3)^2,  # eq3
   x1^2 + y1^2 - 1600,  # eq4
   x2^2 + y2^2 - 2025,  # eq5
   x3^2 + y3^2 - (50 - r3)^2,  # eq6
   (-x1 + x2)^2 + (-y1 + y2)^2 - 225,  # eq7
   -(r3 + 5)^2 + (-x2 + x3)^2 + (-y2 + y3)^2,  # eq8
   -r0^2 + y0^2 + 2500,  # eq9

using NLsolve

function nls(func, params...; ini = [0.0])
   if typeof(ini) <: Number
       r = nlsolve((vout, vin) -> vout[1] = func(vin[1], params..., [ini]), ftol=1e-14)
       v = r.zero[1]
   else
       r = nlsolve((vout, vin)->vout .= func(vin, params...), ini, ftol=1e-14)
       v = r.zero
   end
   return v, r.f_converged
end;

function H(u)
   (r0, y0, x1, y1, x2, y2, r3, x3, y3) = u
   return [
       x1^2 - (r0 + 10)^2 + (y0 - y1)^2,  # eq1
       x2^2 - (r0 + 5)^2 + (y0 - y2)^2,  # eq2
       x3^2 - (r0 + r3)^2 + (y0 - y3)^2,  # eq3
       x1^2 + y1^2 - 1600,  # eq4
       x2^2 + y2^2 - 2025,  # eq5
       x3^2 + y3^2 - (50 - r3)^2,  # eq6
       (-x1 + x2)^2 + (-y1 + y2)^2 - 225,  # eq7
       -(r3 + 5)^2 + (-x2 + x3)^2 + (-y2 + y3)^2,  # eq8
       -r0^2 + y0^2 + 2500,  # eq9
   ]
end;

iniv = [big"66.0", 45.0, 31.2, -24.5, 42, -13, 3, 47, -7]
res = nls(H, ini=iniv);
println(res);

   (BigFloat[76.12612612612612612612612611757250855206487617275733389169965733209449470577765, 57.40372007954591399580886043401747772776331606928505070760935723414311831179716, 33.42516087186933536638372029599284981641171160639776150802648249557181481914727, -21.97176872010205673632683968491622029305014289094789997653090282550024009759404, 43.6384044716071878394454126067690155978138981377281139789361700897187230488509, -10.9858843600510283681634198397671466786061193950162591863412958011058978766673, 2.226463104325699745547073791346257958834702049836892015992527235142629533435189, 47.52241383500506650373257942562149702505122375947591050606909041806671507003448, -4.8919332392084731919302760073024864943304938091114520230459338837681434939186], true)

   円弧を構成する円の直径 = 152.252252, 中心座標 = (0.000000, 57.403720)
   半円の直径 = 100.000000, 中心座標 = (0.000000, 0.000000)
   円弧を構成する円の直径 = 152.252252, 中心座標 = (0.000000, 57.403720)
   丙円の直径 = 20.000000, 中心座標 = (33.425161, -21.971769)
   丁円の直径 = 10.000000, 中心座標 = (43.638404, -10.985884)
   戊円の直径 = 4.452926, 中心座標 = (47.522414, -4.891933)

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r, r1, r2) = (50, 10, 5)
   (r0, y0, x1, y1, x2, y2, r3, x3, y3) = res[1]
   @printf("円弧を構成する円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r0, 0, y0)
   @printf("半円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r, 0, 0)
   @printf("円弧を構成する円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r0, 0, y0)
   @printf("丙円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r1, x1, y1)
   @printf("丁円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r2, x2, y2)
   @printf("戊円の直径 = %.6f, 中心座標 = (%.6f, %.6f)\n", 2r3, x3, y3)
   plot()
   circle(0, y0, r0, :black, beginangle=180, endangle=360)
   circle(0, 0, r, beginangle=180, endangle=360)
   circle(x1, y1, r1, :blue)
   circle(x2, y2, r2, :orange)
   circle(x3, y3, r3, :magenta)
   if more
       point(0, y0, " y0", :black)
       point(r, 0, "r ", :red, :right, :bottom)
       point(x1, y1, "  丙円:r1,(x1,y1)", :blue, :left, :bottom) 
       point(x2, y2, "   丁円:r2,(x2,y2)", :orange, :left, :bottom) 
       point(x3, y3, "  戊円:r3,(x3,y3)", :magenta, :left, :bottom) 
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その311)

2023年07月04日 | Julia

算額(その311)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県菰野町 伎留太神社 寛政9年(1797)

問題文1
扇形の中に直径の等しい 3 個の円が入っている。条件として,弦(扇形を形成する左右の辺の端を結んだ線分),矢(円弧の中点から弦におろした垂線),左右斜(扇形の半径から扇形と中心が一致する内部の円の半径を引いた線分)が与えられているとき円の直径を求めよ。

扇の中心から扇の先端までの距離(扇の外円の半径)を R,等円の半径を r,右下の等円の中心座標を(r, R - 矢) として,以下の方程式を解く。

include("julia-source.txt");

using SymPy

@syms R::positive, r::positive, y1::positive,
   左右斜::negative, 矢::positive, 弦::positive;

(左右斜, 矢, 弦) = (50, 40, 130)

eq1 = r^2 + (R - r - y1)^2 - 4r^2
eq2 = r^2 + y1^2 - (r + (R - 左右斜))^2
eq3 = (弦/2)^2 - (R^2 - (R - 矢)^2);

eq1 を y1 について解く。

solve(eq1, y1) |> println

   Sym[R - r + sqrt(3)*r, R - sqrt(3)*r - r]

eq2 の y1 に代入する。

eq22 = eq2(y1 => R - r - sqrt(Sym(3))r) |> expand
eq22 |> println

   -4*R*r - 2*sqrt(3)*R*r + 2*R*左右斜 + 2*sqrt(3)*r^2 + 4*r^2 + 2*r*左右斜 - 左右斜^2

eq22 を R について解く。

solve(eq22, R)[1] |> println

   (sqrt(3)*r^2 + 2*r^2 + r*左右斜 - 左右斜^2/2)/(sqrt(3)*r + 2*r - 左右斜)

eq3 に代入する。

eq32 = eq3(R => (sqrt(Sym(3))*r^2 + 2*r^2 + r*左右斜 - 左右斜^2/2)/(sqrt(Sym(Sym(3)))*r + 2*r - 左右斜))
eq32 |> println

   弦^2/4 + (-矢 + (sqrt(3)*r^2 + 2*r^2 + r*左右斜 - 左右斜^2/2)/(sqrt(3)*r + 2*r - 左右斜))^2 - (sqrt(3)*r^2 + 2*r^2 + r*左右斜 - 左右斜^2/2)^2/(sqrt(3)*r + 2*r - 左右斜)^2

左右斜, 矢, 弦 を代入すると r のみの式になる。

eq33 = eq32(左右斜 => 50, 矢 => 40, 弦 => 130)

   (-40 + (sqrt(3)*r^2 + 2*r^2 + 50*r - 1250)/(sqrt(3)*r + 2*r - 50))^2 + 4225 - (sqrt(3)*r^2 + 2*r^2 + 50*r - 1250)^2/(sqrt(3)*r + 2*r - 50)^2

二通りの解(r)が得られる。

res = solve(eq33);
length(res)

   2

いずれも虚数として表示されるが,虚部は誤差範囲で 0 である。
したがって,r は 45.2629281760725,14.1521122023713 であるが,後者が適解である。

solve(eq33)[1].evalf(), solve(eq33)[2].evalf()

   (45.2629281760725 - 0.e-22*I, 14.1521122023713 + 0.e-21*I)

このあとさらに y1, R も求めなければならない。

---

最初から連立方程式に,左右斜, 矢, 弦 を代入して解を求めれば,R, r, y1 が一度に求まる。

using SymPy

@syms R::positive, r::positive, y1::positive,
   左右斜::negative, 矢::positive, 弦::positive;

(左右斜, 矢, 弦) = (50, 40, 130)

eq1 = r^2 + (R - r - y1)^2 - 4r^2
eq2 = r^2 + y1^2 - (r + (R - 左右斜))^2
eq3 = (弦/2)^2 - (R^2 - (R - 矢)^2);
res = solve([eq1, eq2, eq3], (R, r, y1))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (72.8125000000000, 14.1521122023713, 34.1482104287061)

   左右斜= 50;  矢 = 40;  弦 = 130
   R = 72.812500;  r = 14.152112;  y1 = 34.148210
   等円の直径は 2r = 28.304224

等円の直径は 2×14.1521122023713 = 28.3042244047426 である。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, r, y1) =  (72.8125000000000, 14.1521122023713, 34.1482104287061)
   @printf("左右斜= %d;  矢 = %d;  弦 = %d\n", 左右斜, 矢, 弦)
   @printf("R = %.6f;  r = %.6f;  y1 = %.6f\n", R, r, y1)
   @printf("等円の直径は 2r = %.6f\n",  2r)
   y = R - 矢
   x = sqrt(R^2 - y^2)
   θ = round(Int, atand(y/x))
   plot()
   circle(0, 0, R, beginangle=θ, endangle=180-θ)
   circle(0, 0, R - 左右斜, :blue, beginangle=θ, endangle=180-θ)
   circle(0, R - r, r, :green)
   circle(r, y1, r, :green)
   circle(-r, y1, r, :green)
   plot!([-x, 0, x, -x], [y, 0, y, y], color=:black, lw=0.5)
   if more
       point(0, R - r, " R-r", :green)
       point(0, y, " R-矢 ", :black, :right, :bottom)
       point(r, y1, " (r,y1)", :green, :left, :bottom)
       point(sqrt(R^2 - y^2), y, "(√(R^2-(R-矢)^2),R-矢) ", :black, :right)
       point(0, R, " R", :red, :left, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その310)

2023年07月02日 | Julia

算額(その310)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)

問題文3
正方形の中に順次,長方形,菱形,円を入れる。長方形の縦(長い方の辺)の外に円をいれ,長方形の横(短い方の辺)の外に順次正方形,正三角形を入れる。長方形の面積が 6281.8600 坪あり,長方形の横中径(横を直径とした外接円の半径)が 32.65 尺のとき,各変数の値を求めよ。

現代解法に示されている図とは印象がかなり違う。長方形はかなり太めである。また円の大きさは異なる。

以下の方程式を解く。

include("julia-source.txt");

using SymPy

@syms 長方形の面積::positive,
   長方形の横を直径とした外接円の半径::positive;

長方形の面積 = Sym(6281.8600)
横中径 = Sym(32.65);

# 直平横(長方形の短辺)
直平横 = 横中径 * 2;

# 直平縦(長方形の長辺)
直平縦 = 長方形の面積 / 直平横;

# 菱面(菱形の一辺)
@syms 菱面::positive
eq1 = (直平横/2)^2 + (直平縦/2)^2 - 菱面^2
菱面 = solve(eq1)[1].evalf();

# 外円径
@syms 外円径::positive
eq2 = (外円径/2 + 外円径/2*√2) - 直平縦/2
外円径 = solve(eq2)[1];

# 方平面(正方形の一辺) 右上角の正方形
方平面 = 直平横/2 / √2;

# 三角面(正三角形の一辺)
@syms 三角面::positive
eq3 = 三角面*cos(PI/12) - 方平面
三角面 = solve(eq3)[1];

# 上ノ中径(縦を直径とした外接円の半径)
上ノ中径 = 直平縦 / 2;

# 外方面(外正方形の一辺)
外方面 = 直平横 / √2 + 直平縦 / √2;

@printf("直平横  = %.6f\n直平縦  = %.6f\n菱面   = %.6f\n外円径  = %.6f\n方平面  = %.6f\n三角面  = %.6f\n上ノ中径 = %.6f\n外方面  = %.6f\n",
   直平横, 直平縦, 菱面, 外円径, 方平面, 三角面, 上ノ中径, 外方面)

   直平横  = 65.300000
   直平縦  = 96.200000
   菱面   = 58.134607
   外円径  = 39.847345
   方平面  = 23.087036
   三角面  = 23.901459
   上ノ中径 = 48.100000
   外方面  = 114.197745
   中央の円の半径 = 27.014288

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   plot([0, 外方面, 外方面, 0, 0], [0, 0, 外方面, 外方面, 0], color=:black, lw=0.5)
   a = 直平横/√2
   plot!([a, 外方面, 外方面 - a, 0, a], [0, 外方面 - a, 外方面, a, 0], color=:blue, lw=0.5)
   r = 外円径/2
   circle(外方面 - r, r, r)
   circle(r, 外方面 - r, r)
   b = 上ノ中径/√2
   plot!([方平面, 外方面 - b, 外方面 - 方平面, b, 方平面], [方平面, b, 外方面 - 方平面, 外方面 - b, 方平面], color=:green, lw=0.5)
   rect(0, 0, 方平面, 方平面, :brown)
   rect(外方面, 外方面, 外方面 - 方平面, 外方面 - 方平面, :brown)
   c = 三角面*sin(pi/12)
   plot!([外方面 - 方平面, 外方面, 外方面 - 方平面 + c, 外方面 - 方平面], [外方面 - 方平面, 外方面 - 方平面 + c, 外方面, 外方面 - 方平面], color=:magenta, lw=0.5)
   plot!([方平面, 0, 方平面 - c, 方平面], [方平面, 方平面 - c, 0, 方平面], color=:magenta, lw=0.5)
   # r2(真ん中の円の半径)
   @syms r2::positive
   eq4 = distance(方平面, 方平面, b, 外方面 - b, 外方面/2, 外方面/2) - r2^2
   r2 = solve(eq4)[1].evalf()
   @printf("中央の円の半径 = %.6f\n", r2)
   circle(外方面/2, 外方面/2, r2, :orange)
   if more
       point(外方面, 0, "外方面", :black, :left, :bottom)
       point(0, 外方面, "外方面", :black, :left, :bottom)
       point(方平面, 0, "方平面", :black, :left, :bottom)
       point(0, 方平面, "方平面", :black, :left, :bottom)
       point(外方面 - r, r, "\n(外方面-r,r)", :red, :center)
       point(外方面/2, 外方面/2, "\nr2,(外方面/2,外方面/2)", :orange, :center)
       point(直平横/√2, 0, "  直平横/√2", :blue, :left, :bottom)
       point(外方面-b, b, "\n(外方面-上ノ中径/√2,上ノ中径/√2)", :green, :center)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
       plot!(xlims=(-5, 127))
   else
       plot!(showaxis=false)
   end
end;

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

算額(その309)

2023年07月01日 | Julia

算額(その309)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)

問題文2

鉤が 3 丈,股が 4 丈の鉤股弦に,内接円,正三角形をいれる。直角の頂点から弦へ垂線(垂線の長さが中股)を下ろす。

弦,中股,円の直径,正三角形の一辺を求めよ。

中股と弦の交点の座標を (x , y), 円の半径を r とする。

以下の方程式を解く。

include("julia-source.txt");

using SymPy

@syms 鉤::positive, 股::positive, 弦::positive, r::positive, x::positive, y::positive

(鉤, 股) = (3, 4)
eq1 = 鉤^2 + 股^2 - 弦^2
eq2 = 鉤 + 股 - 弦 - 2r
eq3 = (3 - y)/x - 3//4
eq4 = 5*(sqrt(x^2 + y^2)) - 3*4
solve([eq1, eq2, eq3, eq4], (弦, r, x, y))

   1-element Vector{NTuple{4, Sym}}:
    (5, 1, 36/25, 48/25)

以下の数値の単位は「丈」

(弦, r, x, y) = (5, 1, 36/25, 48/25)
弦 |> println
中股 = sqrt(x^2 + y^2) |> println
円の直径 = 2r |> println
正三角形の一辺 = (2cos(PI/6)r).evalf() |> println

   5
   2.4
   2
   1.73205080756888

using Plots

function draw(zoomin=false, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (鉤, 股) = (3, 4)
   (弦, r, x, y) = (5, 1, 36/25, 48/25)
   plot([0, 股, 0, 0], [0, 0, 鉤, 0], color=:black, lw=0.5)
   circle(r, r, r, :blue)
   segment(0, 0, x, y, :red)
   plot!([r*(1-√3/2), r*(1+√3/2), r, r*(1-√3/2)], [r/2, r/2, 2r, r/2], color=:green, lw=0.5)
   if more
       point(股, 0, "股", :black, :left, :bottom)
       point(0, 鉤, " 鉤", :black, :left, :bottom)
       point(x, y, " (x,y)", :red, :left, :bottom)
       point(r, r, " (r,r)", :blue)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その308)

2023年07月01日 | Julia

算額(その308)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)

問題文1 

正三角形2つが図のように組み合わされている。両者に重なりのない小さな正三角形一つの面積が 1456.612 である。このとき,正三角形の一辺,正六角形の一辺,正三角形の外接円の直径,正六角形の外接円の直径,正六角形の面積を求めよ。

正三角形の外接円の半径を r とする。

以下の方程式を解く。r が求まれば,あとは連鎖的に求まる。

include("julia-source.txt");

using SymPy

@syms r::positive
eq1 = (r*(1-sin(PI/6)))^2 * tan(PI/6) - 1456.612  # 小さな正三角形の面積
solve(eq1)[1] |> println  # r

   100.457473408692

r = 100.457473408692
2r*sin(PI/3).evalf() |> println  # 正三角形の一辺
2r*(1-sin(PI/6))*tan(PI/6).evalf() |> println  # 正六角形の一辺(正三角形の一辺の 1/3
2r |> println  # 正三角形の外接円の直径
(2r*sin(PI/3)*2/3).evalf() |> println  # 正六角形の一辺 の 2 倍
1456.612*6 |> println # 正六角形の面積 = 小さな正三角形の面積の6倍

   173.997447943854
   57.9991493146180
   200.914946817384
   115.998298629236
   8739.672

using Plots

function draw(zoomin=false, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 100.457473408692
   x = zeros(6)
   y = zeros(6)
   delta = pi/3
   for i in 1:6
       θ = i*delta - pi/6
       x[i] = r*cos(θ)
       y[i] = r*sin(θ)
   end
   plot(x[[1,3,5,1]], y[[1,3,5,1]], color=:black, lw=0.5)
   plot!(x[[2,4,6,2]], y[[2,4,6,2]], color=:black, lw=0.5)
   circle(0, 0, r)
   if more
       point(r, 0, " r")
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その307)

2023年07月01日 | Julia

算額(その307)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 天保15年(1844)

問題文4 

図のような五芒星を一本の糸で作る。中にできた正五角形の面積が 730925坪(7309.25平方寸)のとき,正五角形の一辺の長さと糸の長さを求めよ。

正五角形の一辺の長さを 2a,とする。この面積は (2a)^2\*sqrt(10\*sqrt(5) + 25)/4 である(注)。
五芒星が内接する外円の半径を r,五芒星の第1象限にある角の x 座標を x1 とする。
以下の連立方程式を解く(a だけが求まれば,あとは連鎖的に求まるので,連立方程式を解かなくてもよい)。

include("julia-source.txt");

using SymPy

@syms a::positive, r::positive, x1::positive
eq1 = a/(r*sin(PI/10)) - tan(PI/5)
eq2 = (2a)^2*sqrt(10sqrt(5) + 25)/4 - 7309.25
eq3 = x1 - r*cos(PI/10)

solve([eq1, eq2, eq3], (a, r, x1))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (32.5898173447572, 145.157179706289, 138.052681646693)

外円の半径 = 145.157180寸
正五角形の一辺の長さ = 2a = 65.179635寸
糸の長さ = 10x1 = 1380.526816寸

using Plots

function draw(zoomin=false, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, r, x1) = (32.5898173447572, 145.157179706289, 138.052681646693)
   delta = 2pi/5
   x = zeros(5)
   y = zeros(5)
   for i in 1:5
       θ = pi/2 + (i - 2)delta
       x[i] = r*cos(θ)
       y[i] = r*sin(θ)
   end
   b = tan(pi/5)*y[1]
   @printf("外円の半径 = %.6f寸\n", r)
   @printf("正五角形の一辺の長さ = %.6f寸\n", 2a)
   @printf("糸の長さ = %.6f寸\n", 10x1)
   plot()
   circle(0, 0, r)
   plot!(x[[1,3,5,2,4,1]], y[[1,3,5,2,4,1]], color=:black, lw=0.5)
   if more
       point(r, 0, "r ", :red, :right, :bottom)
       point(0, y[1], " A", :green, :left, :bottom)
       point(tan(pi/5)*y[1], y[1], " B", :green, :left, :bottom)
       point(x[1], y[1], " C", :green, :left, :bottom)
       annotate!(29, 75, text("A:(0,y[1])\nB:tan(pi/5)*y[1],y[1]\nC:(x[1],y[1]))", :left, 10))
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

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

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