【数理溢れ話】【Token】円錐座標系(Spheroconical Coordinate System)

円錐座標系(Spheroconical Coordinate System)は思わぬ場所で役立つ事が知られています。例えば恒星や惑星の運動。アイザック・ニュートン(Sir Isaac Newton、1642年~1727年)が、重力に拘束されたその軌道が円錐曲線(Conic Curve)そのものである事を証明しました。
[Wikipedia「円錐曲線」](https://ja.wikipedia.org/wiki/%E5%86%86%E9%8C%90%E6%9B%B2%E7%B7%9A)

* 惑星や恒星の周囲を回る衛星の軌道が円軌道である事は珍しく、そのほとんどが楕円運動である。その事実を生涯認めなかったデンマークの天文学者ティコ・ブラーエ(Tycho Brahe,1546年~1601年)から観測データを受け取ったドイツの天文学者ヨハネス・ケプラー（Johannes Kepler, 1571年~1630年）が法則化し、天動説に対する地動説の決定的優位が不可逆的に樹立された。
[Wikipsdia「ケプラーの法則」](https://ja.wikipedia.org/wiki/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E3%81%AE%E6%B3%95%E5%89%87)

> ケプラーの法則は、天動説に対する地動説の優位を決定的なものにした。ニコラウス・コペルニクスによって地動説が唱えられて以降も、地動説に基づく惑星運動モデルは、従来の天動説モデルと比べ、実用上必ずしも優れたものではなかった。
>
> しかしケプラーの法則の登場により、地動説モデルは天動説モデルよりも、はるかに正確に惑星の運動を記述することが可能になった。ケプラーの法則の発見は、地球含む惑星の軌道の形が真円ではないことを裏付けた。
>
>また、惑星の軌道を楕円形であるとした第1法則は、天体は真円に基づく運動をするはずであるという、古代ギリシア以来の常識を打ち破るものでもあった。

* またニュートン力学によって放物線軌道以上が「脱出軌道」と位置付けられる展開に。
[おもしろいロケットの科学（５）＜地球からの脱出＞](https://www.neomag.jp/mailmagazines/topics/letter202001.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/afbed89c-785f-dc67-ef40-2715a8f0af43.png)

またマクロ経済学において消費者動向を掌握するのに用いられる無差別曲線（Indifference Curve）。通常二財を巡る効用関数(Utility Function)を2次元直交座標系上に配置して分析しますが、その全体像を俯瞰するとやはり円錐座標系を構成しているのです(二財間の効用の反比例関係を双曲線関数で把握すると、単財の効用が放物線で捉えられる)。
[Wikipedia「無差別曲線」](https://ja.wikipedia.org/wiki/%E7%84%A1%E5%B7%AE%E5%88%A5%E6%9B%B2%E7%B7%9A#:~:text=%E7%84%A1%E5%B7%AE%E5%88%A5%E6%9B%B2%E7%B7%9A%EF%BC%88%E3%82%80%E3%81%95%E3%81%B9%E3%81%A4,%E3%81%AE%E5%88%86%E6%9E%90%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%82%8B%E3%80%82)
![スクリーンショット 2024-02-24 1.31.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f436925c-b3b2-d4b9-af79-b46f2df958b1.png)

それぞれ具体的にはどういう事なんでしょう。順番に見ていきましょう。

# 直交座標系(<font color=blue>Cartesian Coordinate System</font>)と極座標系(<font color=blue>Polar Coordinate System</font>)を連結した多様体(<font color=blue>Manifold</font>)としての振る舞い。

円錐座標系(Spheroconical Coordinate System)が、何よりもまず直交座標系(Cartesian Coordinate System)と極座標系(Polar Coordinate System)を連結した多様体(<font color=blue>Manifold</font>)である事から出発しましょう。全体としては「上面図」と「側面図」をX軸のcos(θ)(0≦θ≦π)が束ねているイメージで、複素座標系とも往復可能です。
[多様体(タヨウタイ)とは？ 意味や使い方](https://kotobank.jp/word/%E5%A4%9A%E6%A7%98%E4%BD%93-94487)
![スクリーンショット 2024-02-24 1.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/2bc51086-9667-68c5-f866-13172559ec39.png)

* 極座標系(r,θ)上に直線(正方形の1辺)を描く関数$y=\sqrt{1+x^2}$が四個でセットなのは正多角形の特徴から。なおこの関数$y=\sqrt{1+x^2}$関数自体は「X軸をcos(θ)(0≦θ≦π)とする」この座標系の制約から離れ「各辺が長さ1の正方形を1列に並べた場合の対角線の長さ」を計算するときにも使われます。
![スクリーンショット 2024-02-10 20.21.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/24419ab8-1045-5c09-5e78-12045814dddf.png)
* 「半円しか描かない関数」$\sqrt{1-x^2}$や「半方形しか描かない関数」$cos(θ)+(1-|cos(θ)|)i$は「半分しか描かない」のではなく「回転体(Solid of Revolution)の断面。それぞれ回転させると球面と算盤玉状平面を構成するが、この座標系ではその性質を部分的にしか用いない。
![スクリーンショット 2024-02-24 5.38.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e5fcc1f6-790f-57c9-4c46-a13558ddfe19.png)

# 極座標系(<font color=blue>Polar Coordinate System</font>)上における離心率(<font color=blue>Eccentricity</font>)εの振る舞い。

以下の投稿を発展させた内容です。
[【数理考古学】離心率①二次曲線（楕円，放物線，双曲線）の極座標表示からの出発。](https://qiita.com/ochimusha01/items/9c709cd0e43a84bfc484)
![スクリーンショット 2024-02-24 1.14.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/fb0a947c-bc8e-d001-be7e-03f08190454c.png)

そこでも述べた通り、**離心率**(Eccentricity)εが**極座標系**(r,θ)(θ=-π→π)の半径rにもたらす影響は以下の式で表されます。

```math
r=\frac{1}{1±ε \cos(θ)}
```

* ε=0の時,r=1(-πθ)→1(0θ)→1(πθ)、つまり**円**(Circle)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b20ea847-ad3d-d7f7-f495-c1798ea66f2d.png)
* 0<ε<1の範囲の時,**楕円**(Ellipse)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/c6bc2f6c-edfd-12ad-2769-fbe85e04f886.png)
* ε=1の時,r=∞(-πθ)→$±\frac{1}{2}$(0θ)→∞(πθ)、つまり**放物線**(Parebora)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b5e7c2e6-842f-9218-b26c-b2f95241ba3e.png)
ただし$y=\sqrt{x}$の形なので、$y=x^2$の形にするにはxy座標の交換が必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/ffca805a-73f6-1a82-09ce-7e9c70fbad83.png)
* ε<1の時、**双曲線**(Hyperbora)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/422f4095-4756-17f5-3034-e4395067407d.png)
特にε=$\frac{π}{2}$の時、第一象限上の頂点と第三象限上の頂点、第二象限上の頂点と第四象限上の頂点を結ぶ直線がx軸上の±1で交差する。

ここで式$r=\frac{1}{1＋ε \cos(θ)}$と式$r=\frac{1}{1-ε \cos(θ)}$は**複素共役**()と似た関係にあり、ε=0あるいはε=∞の場合のみその値が重なるのです。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231313031302f32303231313031303134323933332e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8cd59665-ea18-049e-caf5-0b4a325bfd98.gif)

```python
import numpy as np
import cmath as c
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#figure()でグラフを表示する領域をつくり，figというオブジェクトにする．
plt.style.use('default')
fig = plt.figure()
ax = fig.add_subplot(111,aspect='equal')

#1周分の角度
θ=np.linspace(0,np.pi*2,61,endpoint = True)

#ε(離心率)
ε=np.linspace(0,5,51,endpoint = True)

#円、放物線、双曲線の計算
def eccentric(x):
    return(1/(1+x*np.cos(θ)))

def eccentricity(x):
    c0=[]
    for nm in range(len(θ)):
        c0.append(c.rect(eccentric(x)[nm],θ[nm]))
    return(np.array(c0))

C1=eccentricity(0)
C2=eccentricity(1)
C3=eccentricity(np.pi/2)

#描画関数
def Eccentricity01(n): 
    plt.cla()
    fp0=[]
    for nm in range(len(θ)):
        fp0.append(c.rect(1/(1+ε[n]*np.cos(θ[nm])),θ[nm]))
    xyp=np.array(fp0)
    fm0=[]
    for nm in range(len(θ)):
        fm0.append(c.rect(1/(1-ε[n]*np.cos(θ[nm])),θ[nm]))
    xym=np.array(fm0)
    #描画
    plt.plot(C1.real,C1.imag,color="salmon",lw=0.5,label="ε=0(Circle)")
    plt.plot(C2.real,C2.imag,color="green",lw=0.5,label="ε=1(Parabola)")
    plt.plot(-C2.real,C2.imag,color="green",lw=0.5)
    plt.plot(C3.real,C3.imag,color="olive",lw=0.5,label="ε=π/2(Hyperbola)")
    plt.plot(-C3.real,C3.imag,color="olive",lw=0.5)
    es="{:0<+7}".format(round(ε[n],3))
    ES="ε="+es
    plt.plot(xyp.real,xyp.imag,color="blue",marker="o",lw=1,label=ES)
    plt.plot(xym.real,xym.imag,color="red",marker="o",lw=1,label=ES)
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    plt.xlim([-18,18])
    plt.ylim([-18,18])
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    plt.title("Eccentricity")
    ax.legend(loc='upper right')

#Eccentricity01(10)
#plt.show()

ani = animation.FuncAnimation(fig, Eccentricity01, interval=100,frames=len(ε))
ani.save("Ecc102.gif", writer="pillow")
```
共軛関係にある2曲線の円筒座標系上における遷移イメージはこんな感じ？
![スクリーンショット 2024-02-24 6.07.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/120edb35-b052-03d1-9656-796c1f34a2c2.png)

# 離心率(<font color=blue>Eccentricity</font>)εの極限

さらに詳しく見ていきましょう。以降のグラフでは式$r=\frac{1}{1＋ε \cos(θ)}$に関心を集中させていきます。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231313031302f32303231313031303131333730392e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8f657c6e-7aac-41bd-cce4-96f163353a59.gif)

```python
import numpy as np
import cmath as c
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#figure()でグラフを表示する領域をつくり，figというオブジェクトにする．
plt.style.use('default')
fig = plt.figure()
ax = fig.add_subplot(111,aspect='equal')

#1周分の角度
θ=np.linspace(0,np.pi*2,61,endpoint = True)

#ε(離心率)
ε=np.linspace(0,5,51,endpoint = True)

def eccentric(x):
    return(1/(1+x*np.cos(θ)))

def eccentricity(x):
    c0=[]
    for nm in range(len(θ)):
        c0.append(c.rect(eccentric(x)[nm],θ[nm]))
    return(np.array(c0))

C1=eccentricity(0)
C2=eccentricity(1)
C3=eccentricity(np.pi/2)

#描画関数
def Eccentricity01(n): 
    plt.cla()
    C0=eccentricity(ε[n])
    #描画
    plt.plot(C1.real,C1.imag,color="red",lw=0.5,label="ε=0(Circle)")
    plt.plot(C2.real,C2.imag,color="purple",lw=0.5,label="ε=1(Parabola)")
    plt.plot(C3.real,C3.imag,color="blue",lw=0.5,label="ε=π/2(Hyperbola)")
    es="{:0<+7}".format(round(ε[n],3))
    ES="ε="+es
    plt.plot(C0.real,C0.imag,color="green",marker="o",lw=1,label=ES)
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    plt.xlim([-10,20])
    plt.ylim([-6,6])
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    plt.title("Eccentricity")
    ax = fig.add_subplot(111)
    ax.set_aspect('equal')
    ax.legend(loc='lower right')

#Eccentricity01(10)
#plt.show()

ani = animation.FuncAnimation(fig, Eccentricity01, interval=100,frames=len(ε))
ani.save("Ecc003.gif", writer="pillow")
```
角度の変遷に対応した**半径**(絶対値)の推移に注目すると以下となります。

* ε=0の時は一律y=1。以降もxの中心πに対して±$\frac{2}{π}$ラジアン(±90度)の時の値は一貫してy=1であり続ける。
* ε=1の時に中央値x=πの値がy=∞に到達し(グラフ形は放物線)、以降はεの値が増加する都度、0へと近付いていく(グラフ形は双曲線)。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231313031302f32303231313031303132333835302e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/aaf48726-f76a-6b0c-2f93-c936c14e21c8.gif)

```python
import numpy as np
import cmath as c
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#figure()でグラフを表示する領域をつくり，figというオブジェクトにする．
plt.style.use('default')
fig = plt.figure()
ax = fig.add_subplot(111,aspect='equal')

#1周分の角度
θ=np.linspace(0,np.pi*2,61,endpoint = True)

#ε(離心率)
ε=np.linspace(0,5,51,endpoint = True)

def eccentric(x):
    return(1/(1+x*np.cos(θ)))

def eccentricity(x):
    c0=[]
    for nm in range(len(θ)):
        c0.append(c.rect(eccentric(x)[nm],θ[nm]))
    return(np.array(c0))

C1=eccentricity(0)
C1abs=abs(C1)
C2=eccentricity(1)
C2abs=abs(C2)
C3=eccentricity(np.pi/2)
C3abs=abs(C3)

#描画関数
def Eccentricity01(n): 
    plt.cla()
    C0=eccentricity(ε[n])
    C0abs=abs(C0)
    #描画
    plt.plot(θ,C1abs,color="red",lw=0.5,label="ε=0(Circle)")
    plt.plot(θ,C2abs,color="purple",lw=0.5,label="ε=1(Parabola)")
    plt.plot(θ,C3abs,color="blue",lw=0.5,label="ε=π/2(Hyperbola)")
    es="{:0<+7}".format(round(ε[n],3))
    ES="ε="+es
    plt.plot(θ,C0abs,color="green",marker="o",lw=1,label=ES)
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    plt.xlim([0,np.pi*2])
    plt.ylim([0,5])
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    plt.title("Eccentricity")
    ax.legend(loc='upper right')

#Eccentricity01(10)
#plt.show()

ani = animation.FuncAnimation(fig, Eccentricity01, interval=100,frames=len(ε))
ani.save("Ecc005.gif", writer="pillow")
```
さらに観察範囲を広げると、εが無限に近付くと以下の極限状態に近付く様子がさらに明瞭となります。

![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231313031302f32303231313031303133323033342e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/ad8a6e8a-78aa-48a3-da21-72712caf2fff.gif)

```python
import numpy as np
import cmath as c
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#figure()でグラフを表示する領域をつくり，figというオブジェクトにする．
plt.style.use('default')
fig = plt.figure()
ax = fig.add_subplot(111)

#1周分の角度
θ=np.linspace(0,np.pi*2,61,endpoint = True)

#ε(離心率)
ε=np.linspace(0,25,101,endpoint = True)

def eccentric(x):
    return(1/(1+x*np.cos(θ)))

def eccentricity(x):
    c0=[]
    for nm in range(len(θ)):
        c0.append(c.rect(eccentric(x)[nm],θ[nm]))
    return(np.array(c0))

C1=eccentricity(0)
C1abs=abs(C1)
C2=eccentricity(1)
C2abs=abs(C2)
C3=eccentricity(np.pi/2)
C3abs=abs(C3)

#描画関数
def Eccentricity01(n): 
    plt.cla()
    C0=eccentricity(ε[n])
    C0abs=abs(C0)
    #描画
    plt.plot(θ,C1abs,color="red",lw=0.5,label="ε=0(Circle)")
    plt.plot(θ,C2abs,color="purple",lw=0.5,label="ε=1(Parabola)")
    plt.plot(θ,C3abs,color="blue",lw=0.5,label="ε=π/2(Hyperbola)")
    es="{:0<+7}".format(round(ε[n],3))
    ES="ε="+es
    plt.plot(θ,C0abs,color="green",marker="o",lw=1,label=ES)
    plt.axvline(0, 0, 1,color="black",lw=0.5)
    plt.axhline(0, 0, 1,color="black",lw=0.5)
    plt.xlim([0,np.pi*2])
    plt.ylim([0,25])
    plt.xlabel("Real")
    plt.ylabel("Imaginal")
    plt.title("Eccentricity")
    ax.legend(loc='upper right')

#Eccentricity01(10)
#plt.show()

ani = animation.FuncAnimation(fig, Eccentricity01, interval=100,frames=len(ε))
ani.save("Ecc006.gif", writer="pillow")
```
つまりはこういう事です(半径1の単位円の場合)。

```math
\lim_{ε \to 0}\frac{1}{1±ε \cos(θ)}=
\left\{
\begin{array}{ll}
1 & (\forallθ)
\end{array}
\right.\\
に対し\\
\lim_{ε \to ∞}\frac{1}{1±ε \cos(θ)}=
\left\{
\begin{array}{ll}
1 & (θ=±\frac{π}{2}) \\
0 & (θ≠±\frac{π}{2})
\end{array}
\right.
```
一方、「**X軸**(実数軸)**上の半径**(Radius)/**直径**(Diameter)」の極座表情での認識は以下であり、後者(と中心(0,0)を結ぶ線)はこれ(と中心(0,0)を結ぶ線)と**直交**(Orthogonal)する形となります。

```math
x(x \in \mathbb{R} \land -1≦x≦1)=
\left\{
\begin{array}{ll}
1 & (θ=0 \lor θ=π) \\
0 & (θ≠0 \land θ≠π)
\end{array}
\right.
```
まさしく**虚数**(Imaginal)概念±iと**同値**(EQ=EQuivalence)なんですね。そしてほのかに伺える(0を挟む連続性と同等の)無限遠点∞を挟む連続性概念の気配…
[【連続極座標系】「冪乗関数の極限」問題と「距離関数」概念の導入による解決](https://qiita.com/ochimusha01/items/d1a9fe974fb9e1ea7396)

# 回転による反比例関数(<font color=blue>Inverse Proportionality Function</font>)との重ね合わせ

**反比例関数**(Inverse Proportionality Function)xy=aは双曲線関数$x^2-y^2=a$の一種なので45度回転させて重ね合わせる事が出来ます。

[双曲線 -Wikipedia](https://ja.wikipedia.org/wiki/%E5%8F%8C%E6%9B%B2%E7%B7%9A)

>反比例のグラフxy=Cも双曲線の一種である。これは、直角双曲線：$x^2-y^2=2C$を原点の回りに45°=$\frac{π}{4}$だけ回転させた双曲線に等しい。

![スクリーンショット 2024-02-27 6.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e74c1006-b1d0-2ce0-743e-518ed79db625.png)

cosh(θ)とsinh(θ)のイメージ
![スクリーンショット 2024-01-20 22.13.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0c6a4386-8967-6b5a-940e-52e2d4183f68.png)

* まず式$y=\frac{1}{1±ε \cos(θ)}$でε=$\frac{π}{2}$と置き、$y\mp$1して原点を中央(0,0)に平行移動させる(この時点で2つの双曲線が1つに重なる)。
* このままだとこのま回転させると中央座標(x,y)が($\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}$)となってしまうので$\frac{2}{\sqrt{2}}$を掛ける。
* 次いで45度=$\frac{π}{4}$回転させる。

そんな感じで以下続報…