裏 RjpWiki

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

算額(その1528)

2025年01月09日 | Julia

算額(その1528)

三十三 岩手県一関市舞川相川 菅原神社 嘉永3年(1850)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

今有如図 03040
https://w.atwiki.jp/sangaku/pages/193.html

キーワード:円1個,直角三角形,斜線2本
#Julia, #SymPy, #算額, #和算

直角三角形の鋭角の頂点と対辺の中点を結ぶ斜線を 2 本引き,円を容れる。直角三角形の直角を挟む 2 辺の長さが 3 寸,4 寸のとき,円の直径はいかほどか。

鈎,股をそのまま「鈎」,「股」
円の半径と中心座標を r, (x, y)
とおき,以下の連立方程式を解く。
一度には解けないので,順次解いていく。

include("julia-source.txt");

using SymPy
@syms 鈎::positive, 股::positive,
      r::positive, x::positive, y::positive
eq1 = dist2(0, 鈎, 股, 0, x, y, r)
eq2 = dist2(0, 鈎, 股/2, 0, x, y, r)
eq3 = dist2(0, 鈎/2, 股, 0, x, y, r);
# res = solve([eq1, eq2, eq3], (r, x, y))

ans_x = solve(eq1, x)[1];  # 1 of 2

# y
eq12 = eq2(x => ans_x) |> simplify
ans_y = solve(eq12, y)[1]  # 1 of 2
ans_y |> println

    (-2*r*sqrt(股^2 + 鈎^2) - r*sqrt(股^2 + 4*鈎^2) + 股*鈎)/股

# x
ans_x = ans_x(y => ans_y)
ans_x |> println

    (-r*sqrt(股^2 + 鈎^2) - 股*(-鈎 + (-2*r*sqrt(股^2 + 鈎^2) - r*sqrt(股^2 + 4*鈎^2) + 股*鈎)/股))/鈎

# r
eq13 = eq3(x => ans_x)(y => ans_y)
ans_r = solve(eq13, r)[1]  # 1 of 2
ans_r |> println

    股*鈎*(3*sqrt(股^2 + 鈎^2) + sqrt(股^2 + 4*鈎^2) - sqrt(4*股^2 + 鈎^2))/(6*(股^2 + 2*鈎^2 + sqrt(股^2 + 鈎^2)*sqrt(股^2 + 4*鈎^2)))

2ans_r(鈎 => 3, 股 => 4).evalf() |> println

    0.780358219829331

鈎,股が 3 寸,4 寸のとき,円の直径は 0.780358219829331 寸である。

プログラム的には以下のようにすれば,簡潔に求めることができる。

function rxy(鈎, 股)
    s = sqrt(股^2 + 4*鈎^2)
    弦 = sqrt(股^2 + 鈎^2)
    r = 股*鈎*(3弦 + s - sqrt(4股^2 + 鈎^2))/(6股^2 + 12鈎^2 + 6弦*s)
    y = (股*鈎 - 2r*弦 - r*s)/股
    x = (股*(鈎 - y)- r*弦)/鈎
    return (r, x, y)
end;
rxy(3, 4)

    (0.3901791099146656, 1.5881723747992602, 1.3211468315072228)

function draw(鈎, 股, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r, x, y) = rxy(鈎, 股)
    @printf("r = %g;  x = %g;  y = %g\n", r, x, y)
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    circle(x, y, r)
    segment(0, 鈎/2, 股, 0, :blue)
    segment(0, 鈎, 股/2, 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)
        point(股, 0, "股", :green, :left, :bottom, delta=delta)
        point(0, 鈎, " 鈎", :green, :left, :bottom, delta=delta)
        point(股/2, 0, "股/2", :green, :left, :bottom, delta=delta)
        point(0, 鈎/2, " 鈎/2", :green, :left, :bottom, delta=delta)
        point(x, y, "(x,y)", :red, :center, delta=-delta)
    end
end;

draw(3, 4, true)


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

コメントを投稿

Julia」カテゴリの最新記事