裏 RjpWiki

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

算額(その1638)

2025年02月26日 | Julia

算額(その1638)

長野県埴科郡坂城町 諏訪社 文化2年(1805)
中村信弥「改訂増補長野県の算額」県内の算額1(78)
http://www.wasan.jp/zoho/zoho.html

長方形の中に円を容れる。長方形の長辺,短辺を「長」,「平」,円によって切り取られる対角線の部分を「帯弦」と呼ぶ。長が 185 寸,平が 80 寸のとき,帯弦を求める術を述べよ。

対角線と円の交点座標を (x1, y1), (x2, y2) とおき,以下の連立方程式を解く。

帯弦は sqrt((x1 - x2)^2 + (y1 - y2)^2) である。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy
@syms 長::positive, 平::positive, 帯弦::positive,
      x1::positive, y1::positive, x2::positive, y2::positive
eq1 = y1/(長 - x1) - 平/長
eq2 = y2/(長 - x2) - 平/長
eq3 = (x1 - (長 - 平/2))^2 + (y1 - 平/2)^2 - (平/2)^2
eq4 = (x2 - (長 - 平/2))^2 + (y2 - 平/2)^2 - (平/2)^2
eq5 = sqrt((x1 - x2)^2 + (y1 - y2)^2) - 帯弦
res = solve([eq1, eq2, eq3, eq4, eq5], (帯弦, x1, y1, x2, y2))[2]  # 2 of 2

    (sqrt(2)*平^(3/2)*sqrt(長)/sqrt(平^2 + 長^2), (sqrt(2)*平^(3/2)*長^(3/2) + 平^2*長 - 平*長^2 + 2*長^3)/(2*(平^2 + 長^2)), (-sqrt(2)*平^(5/2)*sqrt(長) + 平^2*(平 + 長))/(2*(平^2 + 長^2)), (-sqrt(2)*平^(3/2)*長^(3/2) + 平^2*長 - 平*長^2 + 2*長^3)/(2*(平^2 + 長^2)), (sqrt(2)*平^(5/2)*sqrt(長) + 平^2*(平 + 長))/(2*(平^2 + 長^2)))

帯弦は sqrt(2)*平^(3/2)*sqrt(長)/sqrt(平^2 + 長^2) である。

res[1] |> println

    sqrt(2)*平^(3/2)*sqrt(長)/sqrt(平^2 + 長^2)

長が 185 寸,平が 80 寸のとき,帯弦は 68.2871764062511 寸である。

res[1](長 => 185, 平 => 80).evalf() |> println

    68.2871764062511

術は 平*sqrt(2長*平/(長^2 + 平^2)) といっているので上で得た数式に一致する。

(平*sqrt(2長*平/(長^2 + 平^2)))(長 => 185, 平 => 80).evalf() |> println

    68.2871764062511

しかし,答では 68 + 179/625 = 68.2864 と,近似値としては精度の低い値を示している。
書き間違いではないようだ。

function draw(長, 平, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (帯弦, x1, y1, x2, y2) = (sqrt(2)*平^(3/2)*sqrt(長)/sqrt(平^2 + 長^2), (sqrt(2)*平^(3/2)*長^(3/2) + 平^2*長 - 平*長^2 + 2*長^3)/(2*(平^2 + 長^2)), (-sqrt(2)*平^(5/2)*sqrt(長) + 平^2*(平 + 長))/(2*(平^2 + 長^2)), (-sqrt(2)*平^(3/2)*長^(3/2) + 平^2*長 - 平*長^2 + 2*長^3)/(2*(平^2 + 長^2)), (sqrt(2)*平^(5/2)*sqrt(長) + 平^2*(平 + 長))/(2*(平^2 + 長^2)))
    println((帯弦, x1, y1, x2, y2))
    plot([0, 長, 長, 0, 0], [0, 0, 平, 平, 0], color=:green, lw=0.5)
    circle(長 - 平/2, 平/2, 平/2)
    segment(0, 平, 長, 0, :blue)
    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)
        dimension_line(x1, y1, x2, y2, "帯弦", :black, :left, :bottom, delta=delta, length=7, dx=1, dy=2)
        point(x1, y1, "(x1,y1)", :blue, :right, :vcenter, deltax=-3delta)
        point(x2, y2, "(x2,y2)", :blue, :right, :vcenter, deltax=-3delta)
        point(長, 平, "(長,平)", :green, :right, :bottom, delta=delta)
    end
end;

draw(185, 80, true)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1637) | トップ | はなまるうどん×吉野家 ゆめ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事