算額あれこれ

算額問題をコンピュータで解きます

算額(その2404)

東都浅草 浅草寺境内稲荷社 文化7年(1810)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円13個,外円
#Julia #SymPy #算額 #和算 #数学


外円の中に,甲,乙,丙,丁,戊,己,庚,合わせて 12 個の円を容れる。甲円の直径が 6 寸,乙円の直径が 3 寸のとき,庚円の直径はいかほどか。
注:甲円と乙円の大きさが等しい場合には「算額(その0350)」になる。

外円の半径と中心座標を \(R,\ (0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (0, r_1 - R)\)
乙円の半径と中心座標を \(r_2,\ (0,\ R - r_2)\)
丙円の半径と中心座標を \(r_3,\ (x_3,\ y_3)\)
丁円の半径と中心座標を \(r_4,\ (x_4,\ y_4)\)
戊円の半径と中心座標を \(r_5,\ (x_5,\ y_5)\)
己円の半径と中心座標を \(r_6,\ (x_6,\ y_6)\)
庚円の半径と中心座標を \(r_7,\ (x_7,\ y_7)\)
とおき,以下の連立方程式の数値解を求める。

include("julia-source.txt");  # julia-source.txt ソース
function driver(r1, r2)
    function H(u)
        function parameters()
            R = r1 + r2
            eq1 = x3^2 + (r1 - R - y3)^2 - (r1 + r3)^2
            eq2 = x7^2 + (r1 - R - y7)^2 - (r1 + r7)^2
            eq3 = x6^2 + (R - r2 - y6)^2 - (r2 + r6)^2
            eq4 = x7^2 + (R - r2 - y7)^2 - (r2 + r7)^2
            eq5 = (x3 - x4)^2 + (y3 - y4)^2 - (r3 + r4)^2
            eq6 = (x3 - x7)^2 + (y3 - y7)^2 - (r3 + r7)^2
            eq7 = (x4 - x5)^2 + (y4 - y5)^2 - (r4 + r5)^2
            eq8 = (x4 - x7)^2 + (y4 - y7)^2 - (r4 + r7)^2
            eq9 = (x5 - x6)^2 + (y5 - y6)^2 - (r5 + r6)^2
            eq10 = (x5 - x7)^2 + (y5 - y7)^2 - (r5 + r7)^2
            eq11 = (x6 - x7)^2 + (y6 - y7)^2 - (r6 + r7)^2
            eq12 = x3^2 + y3^2 - (R - r3)^2
            eq13 = x4^2 + y4^2 - (R - r4)^2
            eq14 = x5^2 + y5^2 - (R - r5)^2
            eq15 = x6^2 + y6^2 - (R - r6)^2
            return [eq1, eq2, eq3, eq4, eq5,
                    eq6, eq7, eq8, eq9, eq10,
                    eq11, eq12, eq13, eq14, eq15]
        end;
        (r3, x3, y3, r4, x4, y4, r5, x5, y5,
            r6, x6, y6, r7, x7, y7) = u
        return parameters()
    end;
    iniv = BigFloat[20, 70, -35,  12, 83, 15,  12, 75, 35,
    16, 60, 50,  20, 50, 20]
    iniv = BigFloat[0.39, 1.3, -0.41, 0.22, 1.5, 0.16, 0.21, 1.5, 0.58, 0.32, 1.1, 0.97, 0.40, 0.93, 0.27].*r1
    res = nls(H, ini=iniv)
    res[2] || println("収束していない")
    return res[1]
end;
(r1, r2) = (6/2, 3/2)
(r3, x3, y3, r4, x4, y4, r5, x5, y5, r6, x6, y6, r7, x7, y7) = driver(r1, r2)
(r3, x3, y3, r4, x4, y4, r5, x5, y5, r6, x6, y6, r7, x7, y7) |> println

    (1.0, 3.4641016151377544, 0.5, 0.5, 3.4641016151377544, 2.0, 0.42857142857142855, 2.969229955832361, 2.7857142857142856, 0.6, 2.0784609690826525, 3.3, 0.9, 2.0784609690826525, 1.8)

# 庚円の直径: 2r7
2r7

    1.8

甲円の直径が 6 寸,乙円の直径が 3 寸のとき,庚円の直径は 1.8 寸である。

術は以下のようになっており,同じ結果が得られる。

@syms 甲, 乙
子 = 甲 + 乙
丑 = 甲*乙*3
A = 4*子^2 - 丑
庚 = 子/A*丑

    \(\displaystyle \frac{3 乙 甲 \left(乙 + 甲\right)}{- 3 乙 甲 + 4 \left(乙 + 甲\right)^{2}}\)

庚(甲 => 6, 乙 => 3)

    \(\displaystyle \frac{9}{5}\)

庚(甲 => 6, 乙 => 3).evalf()

    \(1.8\)

 

描画関数プログラムのソースを見る

function draw(r1, r2, more=true)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (r3, x3, y3, r4, x4, y4, r5, x5, y5, r6, x6, y6, r7, x7, y7) = driver(r1, r2)
    R = r1 + r2
    plot()
    circle(0, 0, R, :green)
    circle(0, r1 - R, r1)
    circle(0, R - r2, r2, :blue)
    circle2(x3, y3, r3, :magenta)
    circle2(x4, y4, r4, :purple)
    circle2(x5, y5, r5, :black)
    circle2(x6, y6, r6, :orange)
    circle2(x7, y7, r7, :tomato)
    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, 0, "外円:R,(0,0)", :green, :center, delta=-delta)
        point(0, r1 - R, "甲円:r1,(0,r1-R)", :red, :center, delta=-delta)
        point(0, R - r2, "乙円:r2,(0,R-r2)", :blue, :center, delta=-delta)
        point(x3, y3, "丙円:r3,(x3,y3)", :magenta, :center, delta=-delta)
        point(x4, y4, "丁円:r4,(x4,y4)", :purple, :left, :bottom, deltax=2delta, delta=4delta)
        point(x5, y5, " 戊円:r5,(x5,y5)", :black, :left, :bottom, delta=r5 + delta/2)
        point(x6, y6, " 己円:r6,(x6,y6)", :orange, :left, :bottom, delta=5delta)
        point(x7, y7, "庚円:r7,(x7,y7)", :tomato, :center, delta=-delta)
        adjust_xlims!(0, right=5delta)
    end
end;
(r1, r2) = (6/2, 3/2)
draw(r1, r2, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

ChatGPT が説明する反転法による算額問題の解き方

ChatGPT が説明する反転法による算額問題の解き方  

伝通院境内大黒天社の円の問題を例に

外円の中にいくつもの円を詰め,円どうしの接し方から未知の直径を求める――。この種の問題では,円の中心座標を一つずつ置いて連立方程式を解く方法があります。一方,「反転法」を使うと,複雑な円の接触を,平行線と円の接触に置き換えて考えられます。

この記事では,東都小石川・伝通院境内大黒天社,文化七年(1810)の算額に関する問題を題材に,円反転の基本と,この問題で甲円の直径851寸を導く流れを説明します。対象資料は,内藤忠辰校『賽祠神算』として[Kano Knowledge Portalに収録されています](https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299)。

数値解は「算額(その2403)」を参照。

---

1. 問題と円の配置

外円の中に,図のように複数の円が入っています。乙円の直径が552寸,丙円の直径が296寸のとき,甲円の直径を求めます。

図の右側にある甲円と,左右対称な甲円は互いに接しています。また,乙円と丙円はそれぞれ左右の甲円に接しています。さらに外円は,左右の甲円に内接しています。丁・戊・己・庚などの小円は,図のようにこれらの円や外円に接しています。

半径を次のように置きます。

- 甲円の半径:\(a\)
- 乙円の半径:\(b\)
- 丙円の半径:\(c\)

求めたい甲円の直径は \(2a\) です。与えられた直径から,

\(
b=276,\qquad c=148
\)

となります。

---

2. 円反転とは何か

反転中心 \(P\) と反転半径 \(k\) を決めます。点 \(X\) を,\(P\) から \(X\) へ向かう半直線上の点 \(X'\) に移し,

\(
PX\cdot PX'=k^2
\)

となるようにします。

この式から,\(P\) から遠い点は反転後に近くへ,近い点は遠くへ移ることが分かります。反転半径 \(k\) は自由に選べます。接触関係を保ったまま,図を見やすい尺度に整えるために使います。

円が直線に変わる理由

反転中心を原点に置きます。原点を通る円の中心が \((A,B)\),半径が \(s\) だとすると,その円の式は

\(
x^2+y^2-2Ax-2By=0
\)

です。反転後の点を \((u,v)\) とすれば,

\(
u=\frac{k^2x}{x^2+y^2},
\qquad
v=\frac{k^2y}{x^2+y^2}.
\)

元の円の式を \(x^2+y^2\) で割ると,

\(
1-\frac{2A}{k^2}u-\frac{2B}{k^2}v=0.
\)

これは \(u,v\) の一次方程式,つまり直線の式です。したがって,**反転中心を通る円は,反転後に直線になります**。

直感的には,円周上で反転中心に近づく点ほど,反転後には遠くへ飛んでいきます。円のその部分が,反転後の直線の遠方へ伸びていきます。

### 円の半径と中心はどう変わるか

反転中心から距離 \(d\) の位置に中心があり,半径 \(r\) の円を考えます。反転後も円になる場合,その半径 \(r'\) は

\(
r'=\frac{k^2r}{|d^2-r^2|}
\)

です。円が反転中心を通ると \(d=r\) になり,円は直線になります。

一般に,原点中心の反転で,元の円の中心ベクトルを \(\mathbf C\),半径を \(r\) とすると,反転後の中心ベクトルと半径は

\(
\mathbf C'=\frac{k^2\mathbf C}{|\mathbf C|^2-r^2},
\qquad
r'=\frac{k^2r}{\left||\mathbf C|^2-r^2\right|}.
\)

反転は円どうしの接触を保ちます。接している円は反転後も接し,円周上の接点も対応します。

---

3. 反転中心を甲円どうしの接点に置く

左右の甲円が接する点を \(P\) とします。この点を反転中心に選びます。甲円の円周はどちらも \(P\) を通るので,反転後は2本の直線になります。

座標を次のように取ります。

- 横方向を \(u\),縦方向を \(v\)
- \(P\) を原点
- 元の甲円の中心を左右に \((\pm a,0)\)

右側の甲円の方程式は

\(
(x-a)^2+y^2=a^2,
\)

すなわち

\(
x^2+y^2=2ax.
\)

反転の式 \(u=k^2x/(x^2+y^2)\) を使うと,

\(
u=\frac{k^2}{2a}.
\)

左側の甲円は \(u=-k^2/(2a)\) になります。つまり,甲円は反転後に

\(
u=-\frac{k^2}{2a},
\qquad
u=+\frac{k^2}{2a}
\)

という2本の平行な直線になります。

計算を簡単にするため,ここでは反転半径を

\(
k=\sqrt{2a}
\)

と選びます。すると甲円が移った直線は

\(
u=-1,\qquad u=1
\)

となり,2直線の間隔は2です。

この選択には未知の \(a\) が含まれます。これは問題ではありません。反転半径は図を整理するための尺度なので,いったんこの尺度で式を立て,最後に与えられた \(b,c\) と結びつけて \(a\) を求めます。

---

4. 乙円と丙円は,反転後に半径1の円になる

乙円は左右の甲円の両方に接しています。反転後の甲円は2本の平行線になったので,反転後の乙円はその両方に接します。

2本の直線の間隔は2です。両方の直線に接する円の直径は2,したがって半径は1です。丙円についても同様です。

ここで,中心の縦位置を元の \(b,c\) と結びつけます。

乙円の中心位置

乙円の中心は,甲円どうしの対称軸上にあります。反転中心 \(P\) から乙円の中心までの距離を \(t_b\) とすると,甲円との接触から

\(
a^2+t_b^2=(a+b)^2,
\)

したがって

\(
t_b^2=b(2a+b).
\)

乙円は \(P\) の下側にあるので,反転後の中心位置は負です。反転後の中心位置は

\(
v_b=\frac{k^2t_b}{t_b^2-b^2}.
\)

ここで \(k^2=2a\),また

\(
t_b^2-b^2=2ab
\)

なので,

\(
v_b=\frac{t_b}{b}
=-\sqrt{1+\frac{2a}{b}}.
\)

乙円の反転後の半径は1です。

丙円の中心位置

同じ計算を丙円に行います。丙円は \(P\) の上側にあるので,反転後の中心位置は

\(
v_c=+\sqrt{1+\frac{2a}{c}}.
\)

丙円の反転後の半径も1です。

よって反転後,乙円と丙円の中心は

\(
(0,-B),\qquad (0,G)
\)

と表せます。ただし

\(
B=\sqrt{1+\frac{2a}{b}},
\qquad
G=\sqrt{1+\frac{2a}{c}}.
\)

---

5. 外円も,反転後に半径1の円になる

外円は,左右の甲円に内接しています。甲円の中心と外円の中心の距離は \(R-a\) です。外円の半径を \(R\),元の図での甲円中心の縦座標を \(y_1\) とすれば,

\(
a^2+y_1^2=(R-a)^2,
\)

したがって

\(
y_1^2=R^2-2aR.
\)

反転中心 \(P\) から見た外円の中心までの距離は \(|y_1|\) です。外円の反転後の半径は

\(
R'=\frac{k^2R}{R^2-y_1^2}.
\)

ここに \(k^2=2a\) と \(R^2-y_1^2=2aR\) を代入すると,

\(
R'=1.
\)

外円も反転後に半径1となり,2本の直線に接します。その中心を \((0,w)\) と置きます。

したがって,乙円・外円・丙円は,いずれも反転後に半径1で,中心が同じ縦軸上に並びます。

---

6. 小円の詰まり方から,中心間隔を求める

上側では,外円と丙円の間に丁円・戊円が入っています。図の左右対称性から,丁円・戊円と同じ半径の円が反対側にもあります。

上側の外円と丙円の中心間隔を \(D\) とします。反転後の平行線を \(u=\pm1\) とし,右側の直線に接する大きい方の円(丁円)の半径を \(q\),その内側の小さい円(戊円)の半径を \(p\) とします。

丁円の半径 \(q\)

外円・丙円は半径1で,中心間隔は \(D\) です。丁円は右の直線と,外円・丙円の両方に接しています。両方の半径1の円から同じ距離にあるので,丁円の中心は2円の中心の中間の高さにあります。

丁円の中心の横座標は \(1-q\),縦方向のずれは \(D/2\) です。外円の中心との距離は \(1+q\) なので,

\(
(1-q)^2+\left(\frac D2\right)^2=(1+q)^2.
\)

整理すると,

\(
D=4\sqrt q.
\)

小円 \(p\) と左右対称性

戊円は,外円・丙円・丁円に接し,反対側の戊円にも接しています。丁円の中心の横座標は \(1-q\) です。戊円の中心を \(x\) とすると,丁円との接触から

\(
x=1-2q-p.
\)

また,戊円は外円・丙円の両方に接するので,その中心は両円の中間の高さにあります。外円との接触条件を使い,さらに丁円との接触条件を合わせると,

\(
p=\frac{q^2}{1-q}.
\)

一方,左右の戊円は互いに接します。左右対称なので,それぞれの中心の横座標は \(x\) と \(-x\) です。2円が接するには中心間隔 \(2x\) が直径 \(2p\) に等しいため,

\(
x=p.
\)

\(x=1-2q-p\) と合わせると,

\(
p=\frac{1-2q}{2}.
\)

2つの \(p\) の式を等しくして,

\(
\frac{q^2}{1-q}=\frac{1-2q}{2}.
\)

これを解くと,

\(
q=\frac13,\qquad p=\frac16.
\)

したがって,

\(
D=4\sqrt{\frac13}=\frac4{\sqrt3}.
\)

下側の隙間も同じ形の円の詰まり方なので,乙円と外円の中心間隔も \(4/\sqrt3\) です。

---

7. 反転後の距離条件を,元の半径につなぐ

反転後の中心の並びは,下から順に

\(
\text{乙円中心 }(-B),\quad
\text{外円中心 }w,\quad
\text{丙円中心 }G
\)

です。

乙円と外円の中心間隔,外円と丙円の中心間隔は,どちらも \(4/\sqrt3\) でした。したがって,

\(
B+w=\frac4{\sqrt3},
\qquad
G-w=\frac4{\sqrt3}.
\)

この2式を足すと,外円の中心 \(w\) が消えて,

\(
B+G=\frac8{\sqrt3}.
\)

ここに

\(
B=\sqrt{1+\frac{2a}{b}},
\qquad
G=\sqrt{1+\frac{2a}{c}}
\)

を代入します。求める甲円の半径 \(a\) は,

\(
\boxed{
\sqrt{1+\frac{2a}{b}}
+
\sqrt{1+\frac{2a}{c}}
=
\frac8{\sqrt3}
}
\)

を満たします。

ここが反転後の配置から元の寸法へ戻る要所です。反転後の距離をそのまま元の距離に読み替えるのではありません。反転後の円の中心位置を,元の半径 \(a,b,c\) の式で表し,既知の \(b,c\) から \(a\) を求めます。

---

8. 方程式を解く

\(b=276,\ c=148\) です。上の式を解くと,甲円の半径は

\(
a=425.5
\)

となります。したがって甲円の直径は

\(
2a=851\text{寸}.
\)

途中の計算を確認します。

\(
1+\frac{2a}{b}
=1+\frac{851}{276}
=\frac{49}{12},
\)

\(
1+\frac{2a}{c}
=1+\frac{851}{148}
=\frac{27}{4}.
\)

よって,

\(
\sqrt{1+\frac{2a}{b}}
+
\sqrt{1+\frac{2a}{c}}
=
\frac{7}{2\sqrt3}+\frac{3\sqrt3}{2}
=
\frac8{\sqrt3}.
\)

確かに反転後の配置条件を満たしています。左辺は \(a\) が大きくなると増えるため,正の解は一つです。

---

9. ご提示の術の式との照合

根号の式を解くと,半径 \(a\) は

\(
a=
\frac{104bc}
{12(b+c)+\sqrt{468bc+27(b+c)^2}}
\)

と表せます。

これに \(b=276,\ c=148\) を代入すると,

\(
b+c=424,\qquad bc=40848,
\)

\(
\sqrt{468bc+27(b+c)^2}
=
\sqrt{23\,970\,816}
=4896.
\)

したがって,

\(
a=
\frac{104\cdot40848}{12\cdot424+4896}
=
\frac{4\,248\,192}{9\,984}
=425.5.
\)

甲円径は直径なので,

\(
2a=851.
\)

乙円径・丙円径を \(552,\ 296\) として書けば,

\(
2a=
\frac{104\cdot552\cdot296}
{12(552+296)+
\sqrt{468\cdot552\cdot296+27(552+296)^2}},
\)

となり,ご提示の術の式と一致します。

---

10. 反転法を使うと何が見えたのか

元の図では,外円を含めた多数の円の中心座標を未知数として,接触条件をたくさん立てる必要があります。反転法では,甲円どうしの接点を中心に選ぶことで,甲円が平行線に変わりました。

その結果,

1. 乙円・丙円・外円は,平行線の間にある同じ半径の円になる。
2. 丁・戊・己・庚の接触関係から,隙間の中心間隔 \(4/\sqrt3\) が決まる。
3. その中心位置を元の乙円・丙円の半径で表し,甲円の半径を求められる。

という流れが見えるようになりました。

反転は,円の問題を自動的に解く魔法ではありません。どの円がどれに接しているかを正確に読み取り,反転後の配置に合った条件を立てる必要があります。ただ,元の図では扱いにくかった「大きな円どうしの接触」を,反転後の「平行線と円の接触」に置き換えられるのが大きな利点です。

この算額では,反転後の配置を通して,甲円の直径851寸に到達できました。

算額(その2403)

東都小石川 伝通院境内大黒天社 文化7年(1810)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円13個,外円
#Julia #SymPy #算額 #和算 #数学


外円の中に,甲,乙,丙,丁,戊,己,庚,合わせて 12 個の円を容れる。乙円の直径が 552 寸,丙円の直径が 296 寸のとき,甲円の直径はいかほどか。

外円の半径と中心座標を \(R,\ (0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (r_1,\ y_1)\)
乙円の半径と中心座標を \(r_2,\ (0,\ y_2)\)
丙円の半径と中心座標を \(r_3,\ (0,\ y_3)\)
丁円の半径と中心座標を \(r_4,\ (x_4,\ y_4)\)
戊円の半径と中心座標を \(r_5,\ (r_5,\ y_5)\)
己円の半径と中心座標を \(r_6,\ (x_6,\ y_6)\)
庚円の半径と中心座標を \(r_7,\ (r_7,\ y_7)\)
とおき,以下の連立方程式の数値解を求める。

include("julia-source.txt");  # julia-source.txt ソース
function driver(r2, r3)
    function H(u)
        function parameters()
            eq1 = r1^2 + y1^2 - (R - r1)^2
            eq2 = x4^2 + y4^2 - (R - r4)^2
            eq3 = r5^2 + y5^2 - (R - r5)^2
            eq4 = x6^2 + y6^2 - (R - r6)^2
            eq5 = r7^2 + y7^2 - (R - r7)^2
            eq6 = r1^2 + (y1 - y2)^2 - (r1 + r2)^2
            eq7 = r1^2 + (y1 - y3)^2 - (r1 + r3)^2
            eq8 = (r1 - x4)^2 + (y1 - y4)^2 - (r1 + r4)^2
            eq9 = (r1 - x6)^2 + (y1 - y6)^2 - (r1 + r6)^2
            eq10 = x6^2 + (y2 - y6)^2 - (r2 + r6)^2
            eq11 = r7^2 + (y2 - y7)^2 - (r2 + r7)^2
            eq12 = x4^2 + (y3 - y4)^2 - (r3 + r4)^2
            eq13 = r5^2 + (y3 - y5)^2 - (r3 + r5)^2
            eq14 = (x4 - r5)^2 + (y4 - y5)^2 - (r4 + r5)^2
            eq15 = (x6 - r7)^2 + (y6 - y7)^2 - (r6 + r7)^2
            return [eq1, eq2, eq3, eq4, eq5,
                    eq6, eq7, eq8, eq9, eq10,
                    eq11, eq12, eq13, eq14, eq15]
        end;
        (R, r1, y1, y2, y3,
            r4, x4, y4, r5, y5,
            r6, x6, y6, r7, y7) = u
        return parameters()
    end;
    iniv = BigFloat[3.6, 1.7, 0.69, -1.4, 2.4,
                    0.54, 1.1, 2.9, 0.32, 3.3,
                    0.92, 1.8, -2.0, 0.62, -2.9].*r2
    res = nls(H, ini=iniv)
    res[2] || println("収束していない")
    return res[1]
end;

(r2, r3) = (552/2, 296/2)
(R, r1, y1, y2, y3, r4, x4, y4, r5, y5, r6, x6, y6, r7, y7) = driver(r2, r3)
(R, r1, y1, y2, y3, r4, x4, y4, r5, y5, r6, x6, y6, r7, y7) |> println

    (928.3636363636364, 425.5, 267.9954976802027, -289.72486235697585, 652.5107769604934, 117.37931034482759, 234.75862068965517, 776.2628208667938, 68.08, 857.5855925766485, 261.84615384615387, 523.6923076923077, -412.3007656618502, 189.11111111111111, -714.6546604805404)

# 甲円の直径:  2r1
2r1

    851.0

乙円の直径が 552 寸,丙円の直径が 296 寸のとき,甲円の直径は 851 寸である。

術は以下のようになっている。

@syms 乙円径, 丙円径
天 = 乙円径*丙円径
地 = 乙円径 + 丙円径
A = sqrt(地^2*27 + 天*468)+ 地*12
甲円径 = 104*天/A

    \(\displaystyle \frac{104 丙円径 乙円径}{12 丙円径 + 12 乙円径 + \sqrt{468 丙円径 乙円径 + 27 \left(丙円径 + 乙円径\right)^{2}}}\)

甲円径(乙円径 => 552, 丙円径 => 296)

    \(851\)

 

描画関数プログラムのソースを見る

function draw(r2, r3, more=true)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (R, r1, y1, y2, y3, r4, x4, y4, r5, y5, r6, x6, y6, r7, y7) = driver(r2, r3)
    plot()
    circle(0, 0, R, :green)
    circle2(r1, y1, r1)
    circle(0, y2, r2, :blue)
    circle(0, y3, r3, :magenta)
    circle2(x4, y4, r4, :purple)
    circle2(r5, y5, r5, :black)
    circle2(x6, y6, r6, :orange)
    circle2(r7, y7, r7, :tomato)
    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, 0, "外円:R,(0,0)", :green, :center, delta=-delta)
        point(r1, y1, "甲円:r1,(r1,y1)", :red, :center, delta=-delta)
        point(0, y2, "乙円:r2,(0,y2)", :blue, :center, delta=-delta)
        point(0, y3, "丙円:r3\n(0,y3)", :magenta, :center, delta=-delta)
        point(x4, y4, "丁円:r4,(x4,y4)", :purple, :left, :bottom, deltax=2delta, delta=4delta)
        point(r5, y5, "戊円:r5,(r5,y5)", :black, :center, :bottom, delta=r5 + delta/2)
        point(x6, y6, "己円:r6,(x6,y6)", :orange, :center, delta=-delta)
        point(r7, y7, "庚円:r7,(r7,y7)", :tomato, :center, delta=-delta)
    end
end;
(r2, r3) = (552/2, 296/2, true)
draw(r2, r3)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2402)

摂州大坂道頓堀 法善寺境内金毘羅社 文化9年(1812)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円4個,長方形,斜線
#Julia #SymPy #算額 #和算 #数学


長方形の中に斜線を設け,大円 2 個,小円 2 個を容れる。大円の直径が与えられたとき,長方形の短辺はいかほどか。

長方形の長辺と短辺を \(a, b\)
大円の半径と中心座標を \(r_1,\ (r_1,\ r_1)\)
小円の半径と中心座標を \(r_2,\ (0,\ r_2) (0,\ b - r_2)\)
斜線の \(x\) 切片を \( (0,\ c)\)
\(a = 4r_1,\ r_2 = r_1/4\)
とおき,以下の連立方程式の解を求める。

include("julia-source.txt");  # julia-source.txt ソース
@syms a::positive, b::positive, c::positive, r1::positive, r2::positive
a = 4r1
r2 = r1/4  # r1 = 2sqrt(r1*r2)
eq1 = dist2(0, c, a/2, b, r1, r1, r1)
eq2 = dist2(0, c, a/2, b, 0, b - r2, r2);
res = solve([eq1, eq2], (b, c))[2];  # 2 of 2

# b: 長方形の短辺(平)
ans_b = res[1]

    \(\displaystyle \frac{16 r_{1}}{7}\)

長方形の短辺(平)は,大円の直径の \(\displaystyle \frac{8}{7}\) 倍である。

 

描画関数プログラムのソースを見る

function draw(r1, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    a = 4r1
    r2 = r1/4
    (b, c) = (16*r1/7, 16*r1/9)
    plot([a/2, a/2, -a/2, -a/2, a/2], [0, b, b, 0, 0], color=:green, lw=0.5)
    plot!([a/2, 0, -a/2], [b, c, b], color=:magenta, lw=0.5)
    circle2(r1, r1, r1)
    circle(0, b - r2, r2, :blue)
    circle(0, r2, r2, :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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta)
        point(0, r2, "小円:r2,(0,r2)", :blue, :center, delta=-r2 - delta)
        point(0, b - r2, "小円:r2,(0,b-r2)", :blue, :center, :bottom, delta=r2 + delta/2)
        point(a/2, 0, "(a/2,0)", :green, :right, delta=-delta)
        point(a/2, b, "(a/2,b)", :green, :right, :bottom, delta=delta/2)
        point(0, c, "(0,c)", :magenta, :center, delta=-delta)
    end
end;
draw(1/2, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2401)

摂州大坂道頓堀 法善寺境内金毘羅社 文化9年(1812)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円5個,半円,長方形
#Julia #SymPy #算額 #和算 #数学


半円の中に大円 2 個,小円 1 個,正三角形を容れる。大円の直径が与えられたとき,小円の直径はいかほどか。

半円の半径と中心座標を \(R,\ (0,\ 0)\)
大円の半径と中心座標を \(r_1,\ (x_1,\ r_1)\)
小円の半径と中心座標を \(r_2,\ (0,\ R - r_2)\)
正三角形の一辺の長さを \(2a\)
とおき,以下の連立方程式の解を求める。

include("julia-source.txt");  # julia-source.txt ソース
@syms R::positive, r1::positive, x1::positive, r2::positive, a::positive
eq1 = R - 2r2 - √Sym(3)a
eq2 = (x1 - a)*√Sym(3) - r1
eq3 = x1^2 + (R - r2 - r1)^2 - (r1 + r2)^2
eq4 = x1^2 + r1^2 - (R - r1)^2
res = solve([eq1, eq2, eq3, eq4], (R, x1, r2, a))[1]

    (r1*(-2 + 3*sqrt(6))/2, r1*(-3*sqrt(2) + 4*sqrt(3))/2, 3*r1*(-2 + sqrt(6))/2, 23*sqrt(3)*r1*(130/23 - 39*sqrt(6)/23)/78)

# r1
ans_r1 = res[1]
@show(ans_r1)

    ans_r1 = r1*(-2 + 3*sqrt(6))/2

    \(\displaystyle \frac{r_{1} \left(-2 + 3 \sqrt{6}\right)}{2}\)

等円の半径 \(r_1\) は,小円の半径 \(r_2\) の \(\displaystyle \frac{\sqrt{17} + 5}{2} = 4.56155281280883\) 倍である。
小円の直径が 1 のとき,等円の直径は 4.56155281280883 である。

術は,\(等円径 = \frac{4小円径}{5 - \sqrt{17}}\) であり,分母を有理化すると等価な式になる。

@syms 小円径
等円径 = 4小円径/(5 - √Sym(17))

    \(\displaystyle \frac{4 小円径}{5 - \sqrt{17}}\)

@syms d
apart(4/(5 - √Sym(17)), d) |> sympy.sqrtdenest |> factor

    \(\displaystyle \frac{\sqrt{17} + 5}{2}\)

apart2(4/(5 - √Sym(17)))

    \(\displaystyle \frac{\sqrt{17}}{2} + \frac{5}{2}\)

 

描画関数プログラムのソースを見る

function draw(r1, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (R, x1, r2, a) = (r1*(-2 + 3*sqrt(6))/2, r1*(-3*sqrt(2) + 4*sqrt(3))/2, 3*r1*(-2 + sqrt(6))/2, 23*sqrt(3)*r1*(130/23 - 39*sqrt(6)/23)/78)
    plot([a, 0, -a], [0, √3a, 0], color=:green, lw=0.5)
    segment(-R, 0, R, 0, :green)
    circle(0, 0, R, :magenta, beginangle=0, endangle=180)
    circle2(x1, r1, r1)
    circle(0, R - r2, r2, :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(x1, r1, "大円:r1,(x1,r1)", :red, :center, delta=-delta)
        point(0, R - r2, "小円:r2,(0,R-r2)", :blue, :center, delta=-delta)
        point(0, 0, "(0,0)", :green, :center, delta=-delta)
        point(a, 0, "(a,0)", :green, :center, delta=-delta)
        point(R, 0, "(R,0)", :green, :center, delta=-delta)
        point(0, √3a, "(0,√3a)", :green, :center, :bottom, delta=delta)
    end
end;
draw(1/2, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2400)

摂州大坂道頓堀 法善寺境内金毘羅社 文化9年(1812)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円5個,半円,長方形
#Julia #SymPy #算額 #和算 #数学


長方形の中に交差する半円を設け,等円 4 個と小円 1 個を容れる。小円の直径が与えられたとき,等円の直径はいかほどか。

長方形の長辺と短辺を \(a,\ b\)
半円の半径と中心座標を \(R,\ (0,\ -b/2),\ (0,\ b/2)\)
等円の半径と中心座標を \(r_1,\ (x_1,\ 0),\ (0,\ b/2 - r_1)\)
小円の半径と中心座標を \(r_2,\ (0,\ 0)\)
とおき,以下の連立方程式の解を求める。

include("julia-source.txt");  # julia-source.txt ソース
@syms R::positive, a::positive, b::positive, r1::positive, x1::positive, r2::positive
a = 2R
b = R
eq1 = b/2 - 2r1 + r2
eq2 = x1^2 + (b/2)^2 - (R - r1)^2
eq3 = x1^2 + (r1 - b/2)^2 - (2r1)^2
res = solve([eq1, eq2, eq3], (r1, x1, R))[1];

# r1
ans_r1 = res[1]
@show(ans_r1)

    ans_r1 = r2*(sqrt(17) + 5)/2

    \(\displaystyle \frac{r_{2} \left(\sqrt{17} + 5\right)}{2}\)

等円の半径 \(r_1\) は,小円の半径 \(r_2\) の \(\displaystyle \frac{\sqrt{17} + 5}{2} = 4.56155281280883\) 倍である。
小円の直径が 1 のとき,等円の直径は 4.56155281280883 である。

術は,\(等円径 = \frac{4小円径}{5 - \sqrt{17}}\) であり,分母を有理化すると等価な式になる。

@syms 小円径
等円径 = 4小円径/(5 - √Sym(17))

    \(\displaystyle \frac{4 小円径}{5 - \sqrt{17}}\)

@syms d
apart(4/(5 - √Sym(17)), d) |> sympy.sqrtdenest |> factor

    \(\displaystyle \frac{\sqrt{17} + 5}{2}\)

apart2(4/(5 - √Sym(17)))

    \(\displaystyle \frac{\sqrt{17}}{2} + \frac{5}{2}\)

 

描画関数プログラムのソースを見る

function draw(r2, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (R, r1, x1) = (2*r2*(4 + sqrt(17)), r2*(sqrt(17) + 5)/2, r2*sqrt(17*sqrt(17)/2 + 71/2))
    a = 2R
    b = R
    plot([a/2, a/2, -a/2, -a/2, a/2], [-b/2, b/2, b/2, -b/2, -b/2], color=:green, lw=0.5)
    circle(0, -b/2, R, :magenta, beginangle=0, endangle=180)
    circle(0, b/2, R, :magenta, beginangle=180, endangle=360)
    circle2(x1, 0, r1, :blue)
    circle22(0, b/2 - r1, r1, :blue)
    circle(0, 0, r2)
    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, b/2 - r1, "等円:r1,(0,b/2-r1)", :blue, :center, delta=-delta)
        point(x1, 0, "等円:r1,(x1,0)", :blue, :center, delta=-delta)
        point(a/2, b/2, "(a/2,b/2)", :green, :right, :bottom, delta=delta/2)
        point(0, 0, "小円:r2,(0,0)", :red, :center, delta=-5delta)
    end
end;
draw(1/2, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2399)

摂州大坂道頓堀 法善寺境内金毘羅社 文化9年(1812)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円3個,正方形
#Julia #SymPy #算額 #和算 #数学


正方形の中に 2 本の斜線を隔てて 天円 1 個,地円 2 個を容れる。正方形の一辺の長さが与えられたとき,天円の直径はいかほどか。

正方形の一辺の長さを \(a\)
天円の半径と中心座標を \(r_1,\ (0,\ a - r_1)\)
地円の半径と中心座標を \(r_2,\ (a/2 - r_2,\ r_2)\)
とおき,以下の連立方程式の解を求める。

include("julia-source.txt");  # julia-source.txt ソース
@syms a::positive, b::negative, r1::positive, r2::positive
eq1 = dist2(b, 0, a/2, a, 0, a - r1, r1)
eq2 = dist2(b, 0, a/2, a, a/2 - r2, r2, r2)
eq3 = dist2(-b, 0, -a/2, a, a/2 - r2, r2, r2)
res = solve([eq1, eq2, eq3], (r1, r2, b))[5];  # 5 of 6

# r1
@syms t
res[1]( (13 + 3√Sym(33))^(1//3) => t) |> factor

    \(\displaystyle - \frac{a \left(\sqrt[3]{2} t^{2} + 2 t - \sqrt{2^{\frac{2}{3}} t^{4} + 4 \sqrt[3]{2} t^{3} + 24 t^{2} - 16 \cdot 2^{\frac{2}{3}} t + 32 \sqrt[3]{2}} - 4 \cdot 2^{\frac{2}{3}}\right)}{12 t}\)

式は長く複雑であるが,所詮 1 つの数値に過ぎない。

ans_r1 = res[1].evalf()
@show(ans_r1)

    ans_r1 = 0.271844506346038*a

    \(0.271844506346038 a\)

天円の半径は,正方形の一辺の長さの 0.271844506346038 倍である。

WollflamAlpha によれば,0.271844506346038 は \(8x^3+4x^2+2x-1 = 0\) の実数解とのことである。

@syms x
ans_x = solve(8x^3+4x^2+2x-1, x)[3]  # 3 of 3

    \(\displaystyle - \frac{1}{6} - \frac{1}{18 \sqrt[3]{\frac{17}{216} + \frac{\sqrt{33}}{72}}} + \sqrt[3]{\frac{17}{216} + \frac{\sqrt{33}}{72}}\)

ans_x.evalf()

    \(0.271844506346038\)

術は,\( ((天 + a)*天 + a^2)*天 - a^3 = 0\) の解であるとのこと。同じように solve() で解くと,天円の直径が得られる。半径が得られるか直径が得られるかの違いだけで,3 次方程式を解くことは共通している

@syms 天
ans_天 = solve( ((天 + a)*天 + a^2)*天 - a^3, 天)[3]  # 3 of 3

    \(\displaystyle a \left(- \frac{1}{3} - \frac{2}{9 \sqrt[3]{\frac{17}{27} + \frac{\sqrt{33}}{9}}} + \sqrt[3]{\frac{17}{27} + \frac{\sqrt{33}}{9}}\right)\)

ans_天.evalf()

    \(0.543689012692076 a\)

地円の半径,\(b\) も同じように 3 次方程式の解になる。

# r2
ans_r2 = res[2].evalf()
@show(ans_r2)

    ans_r2 = 0.228155493653962*a

    \(0.228155493653962 a\)

# b
ans_b = res[3].evalf()
@show(ans_b)

    ans_b = -0.147798871261042*a

    \(- 0.147798871261042 a\)

 

描画関数プログラムのソースを見る

function draw(a, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    r1 = 0.271844506346038*a
    r2 = 0.228155493653962*a
    b = -0.147798871261042*a
    plot([a/2, a/2, -a/2, -a/2, a/2], [0, a, a, 0, 0], color=:green, lw=0.5)
    circle(0, a - r1, r1)
    circle2(a/2 - r2, r2, r2, :blue)
    segment(b, 0, a/2, a)
    segment(-b, 0, -a/2, a)
    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, a - r1, "天円:r1,(0,a-r1)", :red, :center, delta=-delta)
        point(a/2 - r2, r2, "地円:r2,(a/2-r2,r2)", :blue, :center, delta=-delta)
        point(0, 0, "(0,0)", :black, :center, delta=-delta)
        point(b, 0, "(b,0)", :black, :center, delta=-delta)
        point(a/2, 0, "(a/2,0)", :black, :center, delta=-delta)
        point(a/2, a, "(a/2,a)", :black, :center, :bottom, delta=delta/2)
    end
end;
draw(1, true)

    yield from postorder_traversal(arg, keys)

 

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2398)

東都 鐵砲洲稲荷神社 文化5年(1808)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円13個,外円
#Julia #SymPy #算額 #和算 #数学


大円の中に,甲円 4 個,乙円 2 個,丙円 2 個,丁円 2 個,戊円 2 個,計 12 円を容れる。大円の直径が 20 寸のとき,12 個の円の直径の和はいかほどか。

大円の半径と中心座標を \(R,\ (0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (r_1,\ r_1)\)
乙円の半径と中心座標を \(r_2,\ (R - r_2,\ 0)\)
丙円の半径と中心座標を \(r_3,\ (R - 2r_2 - r_3,\ 0)\)
丁円の半径と中心座標を \(r_4,\ (0,\ y_4)\)
戊円の半径と中心座標を \(r_5,\ (r_5,\ 0)\)
とおき,以下の連立方程式の解を求める。

include("julia-source.txt");  # julia-source.txt ソース
function driver(R)
    function H(u)
        function parameters()
            eq0 = R - (2r2 + 2r3 + 2r5)
            eq1 = r1^2 + y1^2 - (R - r1)^2
            eq2 = (R - r2 - r1)^2 + y1^2 - (r1 + r2)^2
            eq3 = (R - 2r2 - r3 - r1)^2 + y1^2 - (r1 + r3)^2
            eq4 = r1^2 + (y1 - y4)^2 - (r1 + r4)^2
            eq5 = (R - 2r2 - r3)^2 + y4^2 - (r3 + r4)^2
            eq6 = r5^2 + y4^2 - (r4 + r5)^2
            return [eq0, eq1, eq2, eq3, eq4, eq5, eq6]
        end;
        (r1, y1, r2, r3, r4, y4, r5) = u
        return parameters()
    end;
    iniv = BigFloat[67, 55*2, 50, 34, 28, 15*2, 8]
    iniv = BigFloat[0.36, 0.53, 0.28, 0.18, 0.14, 0.18, 0.043].*R
    res = nls(H, ini=iniv)
    res[2] || println("収束していない")
    return res[1]
end;
R = 20/2
(r1, y1, r2, r3, r4, y4, r5) = driver(R)
(r1, y1, r2, r3, r4, y4, r5) |> println

    (3.6020682463532325, 5.287592559278311, 2.7958635072935354, 1.7732233864104703, 1.4151590982250397, 1.7950756193340403, 0.4309131062959944)

甲,乙,丙,丁,戊円の半径は以下の通り。

(3.6020682463532325, 2.7958635072935354, 1.7732233864104703, 1.4151590982250397, 0.4309131062959944)

円 12 個の和は 54.477182363726016 である。

(4r1 + 2r2 + 2r3 + 2r4 + 2r5)*2

    54.477182363726016

算額の「答」は 12 円の和を 62.66666666 = 62 + 2/3 としている。
「術」は,大円の直径*47 / 15 = 20*47/15 = 62.6666666 で答えとは一致するが,真値とはまるで異なる。

得られたパラメータで図を描いたが,どこにも不都合は見受けられない。

算額の解は,どこで,どのようにまちがえてしまったのか?

 

描画関数プログラムのソースを見る

function draw(R, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (r1, y1, r2, r3, r4, y4, r5) = driver(R)
    plot()
    circle(0, 0, R, :green)
    circle4(r1, y1, r1)
    circle2(R - r2, 0, r2,:blue)
    circle2(R - 2r2 - r3, 0, r3, :magenta)
    circle22(0, y4, r4, :orange)
    circle2(r5, 0, r5, :brown)
    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,(0,0)", :green, :center, :bottom, delta=delta/2)
        point(r1, y1, "甲円:r1,(r1,y1)", :red, :center, delta=-delta)
        point(R - r2, 0, "乙円:r2,(R-r2,0)", :blue, :center, delta=-delta)
        point(R - 2r2 - r3, 0, "丙円:r3\n(R-2r2-r3,0)", :magenta, :center, delta=-delta)
        point(0, y4, "丁円:r4\n(0,y4)", :orange, :center, delta=-delta)
        point(r5, 0, "戊円:r5,r5,0) ", :brown, :right, delta=-delta)
    end
end;
R = 20/2
draw(R, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2397)

武州荏原郡目黒村 蛸薬師堂 文化2年(1805)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円6個,楕円
#Julia #SymPy #算額 #和算 #数学


楕円の中に,乾円 2 個,坤円 4 個を容れる。外積が 132.62 のとき,坤円が最小になるときの乾円の直径はいかほどか。
注:この条件下では,坤円は一意に決まるので「坤円が最小になるとき」というのは,条件足り得ない。

楕円の長半径,短半径を \(a,\ b\)
乾円の半径と中心座標を \(r_1,\ (r_1,\ 0)\)
坤円の半径と中心座標を \(r_2,\ (r_2,\ y_2)\)
外積を \(S\)
とおき,以下のように計算を進める。

include("julia-source.txt");  # julia-source.txt ソース
@syms a, b, r1, r2, y2, x, y
a = 2r1
y2 = 2sqrt(r1*r2)
eq1 = (2r1)^2 - 4(a^2 - b^2)*(b^2 - r1^2)/b^2

    \(\displaystyle 4 r_{1}^{2} - \frac{\left(- 4 b^{2} + 16 r_{1}^{2}\right) \left(b^{2} - r_{1}^{2}\right)}{b^{2}}\)

坤円と楕円の接点座標を \( (x,\ y)\) とする。

eq2 = (x - r2)^2 + (y - y2)^2 - r2^2
eq3 = x^2/a^2 + y^2/b^2 - 1

    \(\displaystyle -1 + \frac{x^{2}}{4 r_{1}^{2}} + \frac{y^{2}}{b^{2}}\)

eq2, eq3 から \(y\) を消去し,判別関数が 0 であることを eq4 とする。

xy = sympy.resultant(eq2, eq3, y) |> factor |> numerator

    \(16 b^{4} r_{1}^{4} - 8 b^{4} r_{1}^{2} x^{2} + b^{4} x^{4} - 128 b^{2} r_{1}^{5} r_{2} - 64 b^{2} r_{1}^{4} r_{2} x + 32 b^{2} r_{1}^{4} x^{2} + 32 b^{2} r_{1}^{3} r_{2} x^{2} + 16 b^{2} r_{1}^{2} r_{2} x^{3} - 8 b^{2} r_{1}^{2} x^{4} + 256 r_{1}^{6} r_{2}^{2} - 256 r_{1}^{5} r_{2}^{2} x + 128 r_{1}^{5} r_{2} x^{2} + 64 r_{1}^{4} r_{2}^{2} x^{2} - 64 r_{1}^{4} r_{2} x^{3} + 16 r_{1}^{4} x^{4}\)

eq4 = sympy.discriminant(xy, x) |> factor

    \(4294967296 b^{4} r_{1}^{16} r_{2}^{2} \left(- b + 2 r_{1}\right)^{2} \left(b + 2 r_{1}\right)^{2} \left(b^{8} r_{1}^{2} - b^{8} r_{2}^{2} - 8 b^{6} r_{1}^{4} - 16 b^{6} r_{1}^{3} r_{2} + 8 b^{6} r_{1}^{2} r_{2}^{2} + 12 b^{6} r_{1} r_{2}^{3} + 16 b^{4} r_{1}^{6} + 96 b^{4} r_{1}^{5} r_{2} + 88 b^{4} r_{1}^{4} r_{2}^{2} - 72 b^{4} r_{1}^{3} r_{2}^{3} - 56 b^{4} r_{1}^{2} r_{2}^{4} - 128 b^{2} r_{1}^{7} r_{2} - 416 b^{2} r_{1}^{6} r_{2}^{2} - 96 b^{2} r_{1}^{5} r_{2}^{3} + 224 b^{2} r_{1}^{4} r_{2}^{4} - 16 b^{2} r_{1}^{3} r_{2}^{5} + 256 r_{1}^{8} r_{2}^{2} + 384 r_{1}^{7} r_{2}^{3} - 240 r_{1}^{6} r_{2}^{4} + 32 r_{1}^{5} r_{2}^{5}\right)\)

res = solve([eq1, eq4], (b, r2))[8]  # 8 of 10

    (sqrt(2)*r1, r1*sqrt(-22 + 10*sqrt(5))/2)

ans_b = res[1]
@show(ans_b)

    ans_b = sqrt(2)*r1

    \(\sqrt{2} r_{1}\)

ans_r2 = res[2]
@show(ans_r2)

    ans_r2 = r1*sqrt(-22 + 10*sqrt(5))/2

    \(\displaystyle \frac{r_{1} \sqrt{-22 + 10 \sqrt{5}}}{2}\)

S = 外積 = 楕円の面積 - 乾円2個の面積 - 坤円4個の面積 を満たす乾円の半径 \(r_1\) を求める。

@syms S
eq5 = a*ans_b*PI - 2PI*r1^2 - 4PI*ans_r2^2 - S

    \(- S - 2 \pi r_{1}^{2} - \pi r_{1}^{2} \left(-22 + 10 \sqrt{5}\right) + 2 \sqrt{2} \pi r_{1}^{2}\)

ans_r1 = solve(eq5, r1)[2]  # 2 of 2
@show(ans_r1)

    ans_r1 = sqrt(2)*sqrt(S)/(2*sqrt(pi)*sqrt(-5*sqrt(5) + sqrt(2) + 10))

    \(\displaystyle \frac{\sqrt{2} \sqrt{S}}{2 \sqrt{\pi} \sqrt{- 5 \sqrt{5} + \sqrt{2} + 10}}\)

ans_r1.evalf()

    \(0.824934365300459 S^{0.5}\)

\(S = 132.62\) のときの \(r_1\) を求める。

ans_r1(S => 132.62).evalf()

    \(9.50000661523233\)

# 坤円の直径
ans_r1(S => 132.62).evalf()*2

    \(19.0000132304647\)

外積が 132.62 のとき,乾円の直径 = 19.0000132304646, 坤円の直径 = 5.7053829868998, 楕円の長径 = 38.0000264609293, 楕円の短径 = 26.8700763957914 である。

術は以下のようになっており,上の ans_r1 の式と等価である。

#外積 = 13262//100
@syms 外積
極 = sqrt(Sym(8)) + 20

    \(2 \sqrt{2} + 20\)

A = 極 - sqrt(Sym(500))

    \(- 10 \sqrt{5} + 2 \sqrt{2} + 20\)

円積率 = PI/4  # = 0.7853981633974483
乾円径 = sqrt(外積/(A*円積率))

    \(\displaystyle \frac{2 \sqrt{外積}}{\sqrt{\pi} \sqrt{- 10 \sqrt{5} + 2 \sqrt{2} + 20}}\)

乾円径(外積 => 132.62).evalf()

    \(19.0000132304647\)

 

描画関数プログラムのソースを見る

function draw(S, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    r1 = sqrt(2)*sqrt(S)/(2*sqrt(pi)*sqrt(-5*sqrt(5) + sqrt(2) + 10))
    a = 2r1
    b = √2r1
    r2 = r2 = r1*sqrt(-11/2 + 5*sqrt(5)/2)
    y2 = 2sqrt(r1*r2)
    @printf("外積が %.15g のとき,乾円の直径 = %.15g, 坤円の直径 = %.15g, 楕円の長径 = %.15g, 楕円の短径 = %.15g である。\n", S, 2r1, 2r2, 2a, 2b)
    plot()
    ellipse(0, 0, a, b, color=:green, lw=0.5)
    circle2(r1, 0, r1)
    circle4(r2, y2, r2, :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(r1, 0, "乾円:r1,(r1,0)", :red, :center, delta=-delta)
        point(r2, y2, "坤円:r2\n(r2,y2)", :blue, :center, delta=-delta)
        point(0, b, "b", :green, :center, :bottom, delta=delta/2)
        point(a, 0, " a", :green, :left, :bottom, delta=delta/2)
    end
end;
S = 132.62
draw(S, true)

    外積が 132.62 のとき,乾円の直径 = 19.0000132304646, 坤円の直径 = 5.7053829868998, 楕円の長径 = 38.0000264609293, 楕円の短径 = 26.8700763957914 である。

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2396)

播州大坂天満 天満宮 享和元年(1801)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円5個,長方形
#Julia #SymPy #算額 #和算 #数学


長方形の中に 5 個の円を容れる。大円の直径が 1 寸のとき,小円の直径はいかほどか。

長方形の長辺と短辺を \(a,\ b\)
甲円の半径と中心座標を \(r_1,\ (r_1,\ b - r_1)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
丙円の半径と中心座標を \(r_3,\ (r_3,\ r_3)\)
大円の半径と中心座標を \(r_4,\ (b - r_4,\ r_4)\)
小円の半径と中心座標を \(r_5,\ (x_5,\ r_5)\)
とおく。

\(x_5 = r_3 + 2\sqrt{r_3 r_5}\)

\(x_2 = x_5 + 2\sqrt{r_5 r_2}\)

\(a = x_2 + 2\sqrt{r_2 r_4} + r_4 = r_1 + 2\sqrt{r_1 r_4} + r_4\)

\(b = r_3 + 2\sqrt{r_3 r_1} + r_1 = 2r_4\)

以下の連立方程式の数値解を求める。得られた数値を数式で表現できるか探索する。

include("julia-source.txt");  # julia-source.txt ソース
function driver(r4)
    function H(u)
        function parameters()
            x5 = r3 + 2sqrt(r3*r5)
            x2 = x5 + 2sqrt(r5*r2)
            a = x2 + 2sqrt(r2*r4) + r4
            a2 = r1 + 2sqrt(r1*r4) + r4
            b = r3 + 2sqrt(r3*r1) + r1
            b2 = 2r4
            eq1 = a - a2
            eq2 = b - b2
            eq3 = (r1 - x5)^2 + (b - r1 - r5)^2 - (r1 + r5)^2
            eq4 = (r1 - x2)^2 + (b - r1 - r2)^2 - (r1 + r2)^2
            return [eq1, eq2, eq3, eq4]
        end;
        (r1, r2, r3, r5) = u
        return parameters()
    end;
    iniv = BigFloat[0.76, 0.33, 0.29, 0.24].*r4
    res = nls(H, ini=iniv)
    res[2] || println("収束していない")
    return res[1]
end;

大円の半径 \(r_4\) に任意の値を与えて小円の半径 \(r_4\) を求め,比 \(p=r_5/r_4\)を取る。

r4 = 1.23456789
(r1, r2, r3, r5) = driver(r4)
(r1, r2, r3, r5) |> println

    (0.9442630148130106, 0.4035310742634763, 0.3595398618526326, 0.29109075770257153)

p = r5/r4

    0.23578351588471297

小円の直径は,大円の直径の 0.23578351588471297 倍である。

WolflamAlpha によれば,\(0.23578351588471297 = \displaystyle \frac{1}{11 - 6\sqrt{2} + 2\sqrt{46 - 32\sqrt{2}}}\) である。

1/(11 - 6√Sym(2) + 2sqrt(2(23 - 16√Sym(2)))).evalf()

    \(0.235783515884713\)

これを手作業で,分母の有理化を行う。

f = 1/(11 - 6√Sym(2) + 2sqrt(2(23 - 16√Sym(2))))

    \(\displaystyle \frac{1}{- 6 \sqrt{2} + 2 \sqrt{46 - 32 \sqrt{2}} + 11}\)

den = f |> denominator

    \(- 6 \sqrt{2} + 2 \sqrt{46 - 32 \sqrt{2}} + 11\)

t = 11 - 6√Sym(2) - 2sqrt(2(23 - 16√Sym(2)))

    \(- 6 \sqrt{2} - 2 \sqrt{46 - 32 \sqrt{2}} + 11\)

den2 = den*t |> simplify

    \(9 - 4 \sqrt{2}\)

t2 = 9 + 4sqrt(Sym(2))

    \(4 \sqrt{2} + 9\)

den3 = den2*t2 |> expand

    \(49\)

num = t*t2 |> expand

    \(- 18 \sqrt{46 - 32 \sqrt{2}} - 10 \sqrt{2} - 8 \sqrt{2} \sqrt{46 - 32 \sqrt{2}} + 51\)

g = num/den3

    \(\displaystyle - \frac{18 \sqrt{46 - 32 \sqrt{2}}}{49} - \frac{10 \sqrt{2}}{49} - \frac{8 \sqrt{2} \sqrt{46 - 32 \sqrt{2}}}{49} + \frac{51}{49}\)

g.evalf()

    \(0.235783515884713\)

(46 - 32√Sym(2))*(18 + 8√Sym(2))^2 |> expand |> sqrt |> simplify

    \(2 \sqrt{590 - 304 \sqrt{2}}\)

-2sqrt(590 - 304√Sym(2))/49 -10√Sym(2)/49 + 51//49

    \(\displaystyle - \frac{2 \sqrt{590 - 304 \sqrt{2}}}{49} - \frac{10 \sqrt{2}}{49} + \frac{51}{49}\)

分母を有理化すれば,\(\displaystyle \frac{51 -2\sqrt{590 - 304\sqrt{2}} - 10\sqrt{2}}{49}\) になる。

( (51 -2sqrt(590 - 304sqrt(Sym(2))) - 10sqrt(Sym(2)))/49).evalf()

    \(0.235783515884713\)

術は以下のようになっており,同じ式である。

@syms 天
天 = 2 - √Sym(2)
小径 = 1/(sqrt(天*2 + 1) + 天)^2

    \(\displaystyle \frac{1}{\left(- \sqrt{2} + \sqrt{5 - 2 \sqrt{2}} + 2\right)^{2}}\)

小径 |> expand

    \(\displaystyle \frac{1}{- 6 \sqrt{2} - 2 \sqrt{2} \sqrt{5 - 2 \sqrt{2}} + 4 \sqrt{5 - 2 \sqrt{2}} + 11}\)

小径.evalf()

    \(0.235783515884713\)

 

描画関数プログラムのソースを見る

function draw(r4, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    (r1, r2, r3, r5) = driver(r4)
    x5 = r3 + 2sqrt(r3*r5)
    x2 = x5 + 2sqrt(r5*r2)
    a = x2 + 2sqrt(r2*r4) + r4
    b = r3 + 2sqrt(r3*r1) + r1
    plot([0, a, a, 0, 0], [0, 0, b, b, 0], color=:green, lw=0.5)
    circle(r1, b - r1, r1)
    circle(x2, r2, r2, :blue)
    circle(r3, r3, r3, :magenta)
    circle(a - r4, r4, r4, :purple)
    circle(x5, r5, r5, :orange)
    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, 0, "(0,0) ", :black, :center, delta=-delta)
        point(a, 0, "(a,0) ", :black, :center, delta=-delta)
        point(0, b, "(0,b) ", :black, :center, :bottom, delta=delta/2)
        point(r1, b - r1, "甲円:r1,(r1,b-r1)", :red, :center, delta=-delta)
        point(x2, r2, "乙円:r2,(x2,r2)", :blue, :center, delta=-delta)
        point(r3, r3, "丙円:r3\n(r3,r3)", :magenta, :center, delta=-delta)
        point(a - r4, r4, "大円:r4,(a-r4,r4)", :purple, :center, delta=-delta)
        point(x5, r5, "小円:r5\n(x5,r5)", :orange, :center, delta=-delta)
    end
end;
r4 = 1/2
draw(r4, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2395)

播州大坂天満 天満宮 享和元年(1801)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円3個,直角三角形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に等円 3 個を容れる。直径が最小の等円の直径を求める術を述べよ。
注:「直径が最小の等円」とあるが,3 個の円がこの配置になるのは一通りしかないので,この配置における等円の直径を求めればよい。

直角三角形の股(底辺)と鈎(高さ)を \(a,\ b\)
等円の半径を \(r\)
とおく。

右上の等円の中心で直角三角形を 3 つの三角形に分割し,それぞれの面積の和が,底辺×高さ/2 に等しいという方程式を解けばよい。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a, b, r
eq = (a*3r + b*(1 + √Sym(3))r +sqrt(a^2+b^2)*r) - b*a;

ans_r = solve(eq, r)[1]
@show(ans_r)

    ans_r = a*b/(3*a + b + sqrt(3)*b + sqrt(a^2 + b^2))

    \(\displaystyle \frac{a b}{3 a + b + \sqrt{3} b + \sqrt{a^{2} + b^{2}}}\)

ans_r(a => 4, b => 3).evalf()

    \(0.476263192835175\)

 

描画関数プログラムのソースを見る

function draw(a, b, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    r = a*b/(3a + b + √3b + sqrt(a^2 + b^2))
    println(r)
    plot([0, a, 0, 0], [0, 0, b, 0], color=:green, lw=0.5)
    circle(r, 2r, r)
    circle( (1 + √3)r, r, r)
    circle( (1 + √3)r, 3r, r)
    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, 0, "(0,0) ", :black, :center, delta=-delta)
        point(a, 0, "(a,0) ", :black, :center, delta=-delta)
        point(0, b, "(0,b) ", :black, :center, :bottom, delta=delta/2)
        point(r, 2r, "等円:r,(r,2r)", :red, :center, :bottom, delta=delta/2)
        point(r + √3r, r, "等円:r,(r+√3r,r)", :red, :center, :bottom, delta=delta/2)
        point(r + √3r, 3r, "等円:r,(r+√3r,3r)", :red, :center, :bottom, delta=delta/2)
    end
end;
draw(5, 3, true)

    0.5167584005590903

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2394)

播州大坂天満 天満宮 享和元年(1801)

内藤忠辰校:賽祠神算
Kano Knowledge Portal
https://kanokp.lib.u-tokyo.ac.jp/item/tohoku-10010000022299
キーワード:円4個,外円,菱形
#Julia #SymPy #算額 #和算 #数学


外円の中に菱形と等円 3 個を容れる。外円の直径が与えられたとき,等円の直径はいかほどか。

外円の半径と中心座標を \(R,\ (0,\ 0)\)
等円の半径と中心座標を \(r,\ (0,\ 0),\ (0,\ R - r)\)
とおき,以下の方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy
@syms R::positive, r::positive
cosθ = R/sqrt(R^2 + (R - 2r)^2)
eq = (R - 2r)*cosθ - r
ans_r = solve(eq, r)[1] |> factor
@show(ans_r)

    ans_r = R*(-sqrt(5) + 1 + sqrt(2)*sqrt(1 + sqrt(5)))/4

    \(\displaystyle \frac{R \left(- \sqrt{5} + 1 + \sqrt{2} \sqrt{1 + \sqrt{5}}\right)}{4}\)

外円の半径が 1 のとき,等円の直径は 0.653985660764174 である。

ans_r(R => 1).evalf()*2

    \(0.653985660764174\)

術は,\(等円径 = \frac{外円径}{\sqrt{\sqrt{5} + 2} + 1}\) であり,分母を有理化すると上の式と等価になる。

2/(sqrt(√Sym(5) + 2) + 1).evalf()

    \(0.653985660764174\)

 

描画関数プログラムのソースを見る

function draw(R, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    r = R*(-sqrt(5) + 1 + sqrt(2)*sqrt(1 + sqrt(5)))/4
    plot([R, 0, -R, 0, R], [0, R - 2r, 0, 2r - R, 0], color=:green, lw=0.5)
    circle(0, 0, R, :blue)
    circle(0, 0, r)
    circle22(0, R - r, r)
    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, 0, "(0,0) ", :black, :center, delta=-delta)
        point(0, R - r, "等円:r,(0,R-r) ", :red, :center, :bottom, delta=delta/2)
        point(0, R - 2r, "(0,R-2r) ", :green, :center, :bottom, delta=delta/2)
        point(0, R, "(0,R) ", :black, :center, :bottom, delta=delta/2)
        point(R, 0, " (R,0)", :black, :left, :vcenter)
        adjust_xlims!(0, right=3delta)
    end
end;
draw(1, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください

算額(その2393)

東京都 足立区立郷土博物館 嘉永7年(1854)

ADACHI CITY MUSEUM 足立区立郷土博物館 収蔵資料データベース
https://jmapps.ne.jp/adachitokyo/det.html?data_id=14948

東京都 須賀家 嘉永7年(1854)

和算の館
http://www.wasan.jp/tokyo/suga.html

東京都 実相院

みんなで翻刻
https://app.honkoku.org/transcription/6e12ebdc936a3cecf53e1638fab6c581/1

キーワード:累円,帯直円
#Julia #SymPy #算額 #和算 #数学


注1:「和算の館」では,「須賀家」の項に掲載されている。「みんなで翻刻」では,所在は「実相院」となっている。現在は「足立区立郷土博物館」に所蔵されているようである。

帯直円の中に甲円 4 個,および,累円を隔てて乙円 2 個を容れる。累円の個数にはかかわらず,末円の直径と甲円の直径が与えられたとき,乙円の直径はいかほどか。

注2:明記されていないが,乙円は右側の甲円に外接し,帯直円の半円に内接し \(x\) 軸を隔てて互いに外接している。このことは,実際に乙円の直径を計算することで確認できる。

1. 準備

帯直円の中心を原点とする。

甲円の半径を \(r_0 = 1\) とする。甲円の大きさの異なる図はすべて相似なので,一般性を失わない。
甲円は互いに外接するので,右側の甲円の中心座標は \( (\sqrt{3}r_0,\ 0)\) である。
甲円の半径と中心座標を \(r_0,\ (0,\ r_0),\ (\sqrt{3}r_0,\ 0)\) とする。

帯直円を構成する半円の半径と中心座標を \(R,\ (x,\ 0)\)
\(R = 2r_0,\ x = (\sqrt{3} - 1)r_0\) とする。

初円の半径と中心座標を \(r_1,\ (x_1,\ y_1)\)

二円の半径と中心座標を \(r_2,\ (x_2,\ y_2)\)
とする。以下同様。

最後の累円の右側に \(x\) 軸に垂直な接線を引き,この接線の右側に接線と \(x\) 軸に外接し,右の甲円に内接する乙円を描く。

乙円の半径と中心座標を \(r_{99},\ (x_{99},\ 0)\) とする。
\(x_{99}\) は,「末円の中心の \(x\) 座標 + 末円の半径 + 乙円の半径」である。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy
@syms R, r0, r1, x1, y1
r0 = 1
R = 2r0
x = (√Sym(3) - 1)r0;

(R, x, r0)

    (2, -1 + sqrt(3), 1)

2. 初円の決定 \(x_1,\ y_1,\ r_1\)

初円は,上の甲円と右の甲円に外接し,帯直円を構成する半円に内接するという 3 つの接触条件 eq1, eq2, eq3 を満たすものである
結果は解析解として求めたが,これ以降は解析解を求めるのが困難になるので,実際は数値解に基づいて計算を進める。

eq1 = x1^2 + (y1 - r0)^2 - (r0 + r1)^2
eq2 = (x1 - √Sym(3)r0)^2 + y1^2 - (r0 + r1)^2
eq3 = (x1 - x)^2 + y1^2 - (R - r1)^2
res = solve([eq1, eq2, eq3], (r1, x1, y1))[1]  # 1 of 2

    (-4*sqrt(sqrt(3) + 2)/35 + 6*sqrt(3)/35 + 13/35, -4/35 + 12*sqrt(sqrt(3) + 2)/35 + 17*sqrt(3)/35, -4*sqrt(3)/35 + 16/35 + 12*sqrt(3)*sqrt(sqrt(3) + 2)/35)

(r1, x1, y1) = (-4*sqrt(sqrt(3) + 2)/35 + 6*sqrt(3)/35 + 13/35, -4/35 + 12*sqrt(sqrt(3) + 2)/35 + 17*sqrt(3)/35, -4*sqrt(3)/35 + 16/35 + 12*sqrt(3)*sqrt(sqrt(3) + 2)/35)

    (0.44756852100287764, 1.3893452445602443, 1.4064165528325505)

3. 二円の決定

二円は,初円と右側の甲円に外接し,帯直円を構成する半円に内接するという 3 つの接触条件 eq4, eq5, eq6 を満たすものである。
接触する初円のパラメータは前段で決定されたものを引き継ぐ。
二円の接触条件は,初円の接触条件 eq1, eq2, eq3 における添字の 1 が 2 になっているだけではないことに注意が必要である。

(r1, x1, y1) = (0.44756852100287764, 1.3893452445602443, 1.4064165528325505)
@syms r2, x2, y2
eq4 = (x2 - x1)^2 + (y2 - y1)^2 - (r2 + r1)^2
eq5 = (x2 - √3r0)^2 + y2^2 - (r0 + r2)^2
eq6 = (x2 - x)^2 + y2^2 - (R - r2)^2
res2 = solve([eq4, eq5, eq6], (r2, x2, y2))[1]  # 1 of 2

    (0.232262716345949, 2.03526265853103, 1.19437597745953)

4. 三円以降の決定

三円は,二円と右側の甲円に外接し,帯直円を構成する半円に内接するという 3 つの接触条件 eq7, eq8, eq9 を満たすものである。
この接触条件は,二円の接触条件 eq4, eq5, eq6 の添字を 1 を 2,2 を 3 にしたもの,すなわち漸化式である。

(r2, x2, y2) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
@syms r3, x3, y3
eq7 = (x3 - x2)^2 + (y3 - y2)^2 - (r3 + r2)^2
eq8 = (x3 - √3r0)^2 + y3^2 - (r0 + r3)^2
eq9 = (x3 - x)^2 + y3^2 - (R - r3)^2
res3 = solve([eq7, eq8, eq9], (r3, x3, y3))[1]  # 1 of 2

    (0.135563003339583, 2.32536179755013, 0.968238299036497)

したがって,二円の決定式を関数にすれば,現在注目している累円の次の累円のパラメータを得ることができる。

using SymPy
function nextcircle(r1, x1, y1)
    #(arg_r1, arg_x1, arg_y1) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
    #    println( (arg_r1, arg_x1, arg_y1))
    #(r1, x1, y1) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
    #    println( (r1, x1, y1))
    @syms r2, x2, y2
    r0 = 1
    R = 2r0
    x = (√3 - 1)r0
    eq4 = (x2 - x1)^2 + (y2 - y1)^2 - (r2 + r1)^2
    eq5 = (x2 - √3r0)^2 + y2^2 - (r0 + r2)^2
    eq6 = (x2 - x)^2 + y2^2 - (R - r2)^2
    res = solve([eq4, eq5, eq6], (r2, x2, y2))[1]  # 1 of 2
    return res
end;

二円のパラメータ (r2, x2, y2) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
をあたえれば,三円のパラメータ (r3, x3, y3) を返す。
三円のパラメータ (r3, x3, y3) をあたえれば,四円のパラメータ (r4, x4, y4) を返す。
以上を繰り返すので,for ループで簡単に累円のパラメータを求めることができる。
注:初円と二円のパラメータはこの関数の生成規則に従わない。
初円のパラメータ: (0.44756852100287764, 1.3893452445602443, 1.4064165528325505)
二円のパラメータ: (0.232262716345949, 2.03526265853103, 1.19437597745953)

(r2, x2, y2) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
for i = 1:10
    (r3, x3, y3) = nextcircle(r2, x2, y2)  # 次世代の円のパラメータ
    println( (r3, x3, y3))
    (r2, x2, y2) = (r3, x3, y3)  # 世代交代
end

    (0.135563003339583, 2.32536179755013, 0.968238299036497)
    (0.0873528877224219, 2.46999214440161, 0.798610597119657)
    (0.0605363776646687, 2.55044167457487, 0.674517455038254)
    (0.0442670465501172, 2.59924966791852, 0.581772980739726)
    (0.0337139160790343, 2.63090905933177, 0.510507887826634)
    (0.0265023403441316, 2.65254378653648, 0.454312370955639)
    (0.0213658361693979, 2.66795329906068, 0.408992295420652)
    (0.0175824590554639, 2.67930343040248, 0.371734487924144)
    (0.0147175610817898, 2.68789812432350, 0.340598936904917)
    (0.0124973107388075, 2.69455887535245, 0.314211749788025)

4. 末円と乙円の関係

算題に「累円の個数にかかわらず」とあることから,既述の円のどれも末円として以下が成り立つ。

注2 に「明記されていないが,乙円は右側の甲円に外接し,帯直円の半円に内接し \(x\) 軸を隔てて互いに外接している。」と書いた。

既述のとおり,最後の累円の右側に \(x\) 軸に垂直な接線を引き,この接線の右側に接線と \(x\) 軸に外接し,右の甲円に内接する乙円を描く。

乙円の半径と中心座標を \(r_{99},\ (x_{99},\ y_{99})\) とする。
\(x_{99}\) は,「末円の中心の \(x\) 座標 + 末円の半径 + 乙円の半径」
\(y_{99} = r_{99}\)である。

末円の半径と中心座標を \(r_9,\ (x_9,\ y_9)\) とすれば,乙円が右の甲円に内接することは eq99 で表される。

四円が末円の場合を考える。

function getparameter(r9, x9)
    @syms r99, x99, y99
    r0 = 1
    R = 2r0
    x99 = x9 + r9 + r99
    y99 = r99
    eq99 = (x99 - √Sym(3)r0)^2 + r99^2 - (r0 - r99)^2
    ans_r99 = float(solve(eq99, r99)[2])
end;
getparameter(0.0873528877224219, 2.46999214440161)

    0.08535709086331093

術は,
\(子 = 甲円径 - 末円径\)

\(乙円径 = (\sqrt{子\cdot 甲円径}) - 子)\cdot 2\)
である。

子 = 1 - 0.0873528877224219

    0.9126471122775781

乙円径 = (sqrt(0.9126471122775781) - 0.9126471122775781)*2

    0.08535709086330923

完全に等しくはないが,演算誤差の範囲内かとも思われる。

この関係は,どれを末円としても成り立つ。

しかし,課題は,累円のパラメータ(\(r_i,\ x_i\))から,いかにしてこの術を導き出すかである。
単純な比例関係でないことは明らかである。

rxy = [
    0.44756852100287764  1.3893452445602443  1.4064165528325505
    0.232262716345949  2.03526265853103 1.19437597745953
    0.135563003339583  2.32536179755013  0.968238299036497
    0.0873528877224219  2.46999214440161  0.798610597119657
    0.0605363776646687  2.55044167457487  0.674517455038254
    0.0442670465501172  2.59924966791852  0.581772980739726
    0.0337139160790343  2.63090905933177  0.510507887826634
    0.0265023403441316  2.65254378653648  0.454312370955639
    0.0213658361693979  2.66795329906068  0.408992295420652
    0.0175824590554639  2.67930343040248  0.371734487924144
    0.0147175610817898  2.68789812432350  0.340598936904917
    0.0124973107388075  2.69455887535245  0.314211749788025
    ];

r0 = 1
for i = 1:12
    (r9, x9) = (rxy[i, 1], rxy[i, 2])
    r99 = getparameter(r9, x9)
    子 = r0 - r9
    術 = (sqrt(子*r0) - 子)*2
    println( (i, r99, 術, abs(r99 - 術)/術 < 1e-12))
end

    (1, 0.38165172945034676, 0.3816517294503461, true)
    (2, 0.21693780842319343, 0.21693780842319366, true)
    (3, 0.13062808697960768, 0.13062808697960704, true)
    (4, 0.08535709086331093, 0.08535709086330923, true)
    (5, 0.0595913880335281, 0.05959138803352815, true)
    (6, 0.04376600103328998, 0.04376600103328854, true)
    (7, 0.03342486564613559, 0.03342486564613134, true)
    (8, 0.026324380742839142, 0.02632438074283705, true)
    (9, 0.02125047571732607, 0.0212504757173253, true)
    (10, 0.017504486342910363, 0.01750448634290569, true)
    (11, 0.014663007236942143, 0.014663007236938252, true)
    (12, 0.012458019139261128, 0.012458019139260035, true)

5. CatGPT による解説

提示された術は,**累円の半径だけから出る**と整理できます。鍵は,各累円が「半径 \(2\) の帯直円の半円」と「半径 \(1\) の右の甲円」の両方に接していることです。投稿の数値例と式は,この配置では整合しています。

半径を \(r_0=1\) とし,帯直円をつくる半円の中心を \(A=(\sqrt3-1,0)\),右の甲円の中心を \(C=(\sqrt3,0)\) とします。2つの中心の距離は \(1\) です。両方に接する末円の中心を \(P=(x,y)\),半径を \(r\) とすれば,

$
|P-A|=2-r,\qquad |P-C|=1+r.
$

この2式を二乗して引くと,

$
x=2-3r.
$

したがって,末円の右端の \(x\) 座標は \(x+r=2-2r\) です。末円の右端に引いた垂直接線の右側に半径 \(s\) の乙円を置くと,その中心は \( (x+r+s,s)\)。右の甲円に接する条件は

$
(x+r+s-\sqrt3)^2+s^2=(1+s)^2.
$

先ほどの \(x=2-3r\) を代入して正の解を取れば,

$
s=2\left(\sqrt{1-r}-(1-r)\right).
$

径で書き直すと,

$
\text{子}=2-2r=\text{甲円径}-\text{末円径},
$
$
\text{乙円径}=2s
=2\bigl(\sqrt{\text{子}\cdot 2}-\text{子}\bigr),
$

となり,術と一致します。半径を \(r_0\) に戻すと,\(\text{乙円径}=2(\sqrt{\text{子}\cdot\text{甲円径}}-\text{子})\) です。

なお,この導出で円列の個数や,末円が何番目かは使っていません。必要なのは,選んだ末円が2つの固定円に接していることと,乙円を指定の垂直接線・\(x\) 軸・右の甲円に接する位置に置くことです。そのため「どれを末円としても成り立つ」という観察も説明できます。

以上

 

描画関数プログラムのソースを見る

function draw(r1, more=false)
    pyplot(size=(600, 600), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAexMincho")
    R = 2r1
    x = (√3 - 1)r1
    (r1, x1, y1) = (0.44756852100287764, 1.3893452445602443, 1.4064165528325505)
    (r2, x2, y2) = (0.232262716345949, 2.03526265853103, 1.19437597745953)
    (r3, x3, y3) = (0.135563003339583, 2.32536179755013, 0.968238299036497)
    (r4, x4, y4) = (0.0873528877224219, 2.46999214440161, 0.798610597119657)
    r99 = 0.0853570908633109
    x0 = x4 + r4
    y0 = sqrt(R^2 - (x0 - x)^2)
    plot()
    rect(-x, -R, x, R, :black)
    circle(x, 0, R, beginangle=-90, endangle=90)
    circle(-x, 0, R, beginangle=90, endangle=270)
    circle22(0, r0, r0, :purple)
    circle2(√3r0, 0, r0, :purple)
    circle4(x1, y1, r1, :orange)
    circle4(x2, y2, r2, :orange)
    circle4(x3, y3, r3, :orange)
    circle4(x4, y4, r4, :orange)
    circle22f(x4 + r4 + r99, r99, r99, :blue)
    segment(x0, -y0, x0, y0, :black)
    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, r0, "甲円:r0,(0,r0)", :purple, :center, delta=-delta)
        point(√3r0, 0, "甲円:r0,(√3r0,0)", :purple, :center, delta=-delta)
        point(x, 0, " 半円:R,(x,0)", :red, :left, :bottom, delta=delta/2)
        point(x1, y1, "初円:r1\n(x1,y1)", :orange, :center, :bottom, delta=delta/2)
        point(x2, y2, " 二円:r2,(x2,y2)", :orange, :left, :bottom, delta=delta/2, deltax=r2)
        point(x3, y3, " 三円:r3,(x3,y3)", :orange, :left, :bottom, delta=delta/2, deltax=r3)
        point(x4, y4, " 四円:r4,(x4,y4)", :orange, :left, :bottom, delta=delta/2, deltax=r4)
        point(x0+r99, r99, " 乙円:r99,(x0+r99,r99)", :blue, :left, :vcenter, deltax=r99)
        point(x0, 0, "(x0,0) ", :black, :right, :bottom, delta=delta/2)
        point(0, 0, "(0,0) ", :black, :center, delta=-delta)
        point(0, R, "(0,R) ", :black, :center, :bottom, delta=delta/2)
        adjust_xlims!(0, right=30delta)
    end
end;
draw(1, true)

 

「算額あれこれ」の全ページの索引


以下のアイコンをクリックして応援してください