【初心者向け】方形描画関数(Square Drawing Function)②距離空間(Metric Space)との関係。

今回は以下の投稿とは別の観点から出発します。
[【初心者向け】方形描画関数(Square Drawing Function)①三角関数(Trigonometric Function)との関係。](https://qiita.com/ochimusha01/items/9183360c0009cfac5b04)
![image.gif](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fo%2Fochimusha01%2F20201218%2F20201218180039.gif?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=7de0eea6d711b6e80544b85b6e1c51d7)
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218063808.gif)

#直径上の<font color=purple>1次元運動</font>(<font color=blue>Linear motion</font>)から<font color=green>X+Y=1</font>の世界へ。
<font color=green>X軸上</font>で<font color=green>+1</font>と<font color=green>-1</font>の間を等速で往復する**単振動運動**(<font color=blue>Simple vibration,往復距離4</font>)から出発します。すなわち既に**対蹠**(<font color=blue>Antipodes</font>)/**直径**(<font color=blue>Diameter</font>)は発見済みで**1次元状態**からは脱却しているものと考えます。いわゆる**二辺形**(<font color=blue>Bilateral</font>)状態…
[【オイラーの多面体定理と正多面体】内接円/球面の半径と外接円/球面の半径の狭間](https://qiita.com/ochimusha01/items/1312cc54694cf1a27e17)
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201119/20201119015758.gif)

```R
Simple_Vibration_X<-function(Radian){
c0<-seq(0,pi*2,length=61)
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X",xlab="x=1→0→-1→0→1",ylab="y=0", col=rgb(0,1,0))
abline(h=0,col=rgb(1,0,0))
abline(v=0,col=rgb(1,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(Radian,0,"x",col=rgb(0,0,1))
segments(0,0,Radian,0,col=rgb(0,0,1))
# 凡例を書き添える 。
legend("topright", legend=c("Circle(Radius=1,Augment=θ)","x=y=0","x=1→0→-1→0→1"), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(1,0,0),rgb(0,0,1)))
}

#アニメーション
library("animation")
c0<-seq(-1,1,length=31)
Time_Code<-c(rev(c0[2:31]),c0)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_X(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_X.gif")
```
直線移動時、**線分長**<font color=green>1</font>を保つと考えると周期が**半分**(<font color=blue>X1=1→0→1,X2=0→-1→0,往復距離2</font>)となります。すなわち**三角不等式**(<font color=blue>Triangle inequality</font>)でいう<font color=green>|x+y|=|x|+|y|</font>(<font color=blue>三角形の高さ0</font>)の状態です。
[【初心者向け】「三角不等式」の体感方法？](https://qiita.com/ochimusha01/items/325717eef47b1cbeadb1)
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218113705.gif)

```R
Simple_Vibration_X<-function(Radian){
c0<-seq(0,pi*2,length=61)
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X",xlab="x=1→0→-1→0→1",ylab="y=0", col=rgb(0,1,0))
abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(Radian,0,"x1",col=rgb(0,0,1))
text(-(1-Radian),0,"x2",col=rgb(1,0,0))
segments(0,0,Radian,0,col=rgb(0,0,1))
segments(0,0,-(1-Radian),0,col=rgb(1,0,0))
# 凡例を書き添える 。
legend("topright", legend=c("Circle(Radius=1,Augment=θ)","x1","x2"), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(0,0,1),rgb(1,0,0)))
}

#アニメーション
library("animation")
c0<-seq(0,1,length=21)
Time_Code<-c(rev(c0[2:21]),c0)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_X(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_X1X2.gif")
```

この移動を<font color=green>Y軸</font>に振って周回させると**周期**が戻り(<font color=blue>距離4</font>)、以下の動きが観測されるのです。
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201214/20201214055125.gif)

```R
Square_XY<-function(Radius){

c0<-seq(-1,1,length=31)
cx<-c(rev(c0),c0[2:31])
c1<-seq(0,1,length=16)
cy<-c(c1,rev(c1[1:15]),-c1[2:16],-rev(c1[1:15]))
complex(real=cx*Radius,imaginary=cy*Radius)
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61)
cx<-cos(c0)
cy<-sin(c0)
cmpx<-Re(Square_XY(1))
cmpy<-Im(Square_XY(1))
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))
par(new=T)
plot(cx*sqrt(2)/2,cy*sqrt(2)/2,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="",col=c(200,200,200))
par(new=T)
plot(cx*2/sqrt(2),cy*2/sqrt(2),type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="",col=c(200,200,200))
par(new=T)
plot(cx/2,cy/2,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=c(200,200,200))
par(new=T)
plot(cmpx,cmpy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,1))
par(new=T)
plot(cmpx*sqrt(2)/2,cmpy*sqrt(2)/2,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="",col=c(200,200,200))
par(new=T)
plot(cmpx*2/sqrt(2),cmpy*2/sqrt(2),type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="",col=c(200,200,200))
par(new=T)
plot(cmpx/2,cmpy/2,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,1))
abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(Re(Radian),0,"X",col=rgb(0,0,1))
text(0,Im(Radian),"Y",col=rgb(0,0,1))
text(Re(Radian),Im(Radian),"M",col=rgb(1,0,0))
text(Re(Radian)/2,Im(Radian)/2,"m",col=rgb(1,0,0))
segments(Re(Radian),0,0,Im(Radian),col=rgb(0,0,1))
segments(0,0,Re(Radian),Im(Radian),col=rgb(1,0,0))
# 凡例を書き添える 。
legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","x=y=0","x+y=1","M={x,y},m={x/2,y/2}"), lty =c(1,1,1,1),col=c(rgb(0,1,0),rgb(0,0,0),rgb(0,0,1),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code<-Time_Code<-Square_XY(1)
saveGIF({
for (i in Time_Code[1:60]){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XY.gif")
```
①背景にここで展開するアニメーションと密接な関係がある「<font color=purple>立方体の外接円と内接円の同心円的連鎖</font>(<font color=blue>半径の増減0.5</font>)」を目安として追加。
[【オイラーの多面体定理と正多面体】内接円/球面の半径と外接円/球面の半径の狭間](https://qiita.com/ochimusha01/items/1312cc54694cf1a27e17)
![Rplot30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8b69aebd-16a4-79b0-25e5-008b4dfa970e.png)

* 単位円（<font color="blue">Unit circle</font>）上に同心円を描く任意の正方形内で正方形を回すと、その辺長の比は<font color="green">sqrt(2):sqrt(2)</font>と<font color="green">1:2</font>の間を反復し続けるが、この比が多層化された内接円と外接円の半径の推移比とぴったり重なる。<br>[【初心者向け】ピタゴラスの定理あるいは三平方の定理からの出発](https://qiita.com/ochimusha01/items/4c7f731b0ef3cc998aa1)<br>![20190918061420.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/fd59150f-72ba-3566-7534-2d2bb6f3a177.gif)

<!-- html table generated in R 3.5.2 by xtable 1.8-4 package -->
<!-- Sat May  9 17:05:36 2020 -->
<table border=1>
<tr> <th>  </th> <th> Target_size </th> <th> Target_names </th> <th> Target_values </th>  </tr>
  <tr> <td align="right"> 1 </td> <td> 2^-1 </td> <td> 2^-1(2^-0.5r) </td> <td> 0.5 </td> </tr>
  <tr> <td align="right"> 2 </td> <td> 2^-1 </td> <td> 2^-1d=2^-1*4 </td> <td> 1 </td> </tr>
  <tr> <td align="right"> 3 </td> <td> 2^-1 </td> <td> 2^-1a1=2^0a0 </td> <td> sqrt(2)=1.414214 </td> </tr>
  <tr> <td align="right"> 4 </td> <td> 2^-1 </td> <td> 2^-1a1(2^-0.5a0)*4 </td> <td> 4sqrt(2)=5.656854 </td> </tr>
  <tr> <td align="right"> 5 </td> <td> 2^-0.5 </td> <td> 2^-0.5(2^0r) </td> <td> sqrt(2)/2=0.7071068 </td> </tr>
  <tr> <td align="right"> 6 </td> <td> 2^-0.5 </td> <td> 2^-0.5d=2^-0.5*4 </td> <td> sqrt(2)=1.414214 </td> </tr>
  <tr> <td align="right"> 7 </td> <td> 2^-0.5 </td> <td> 2^-0.5a1=2^0a0 </td> <td> 1 </td> </tr>
  <tr> <td align="right"> 8 </td> <td> 2^-0.5 </td> <td> 2^-1a1(2^0.5a0)*4 </td> <td> 4 </td> </tr>
  <tr> <td align="right"> 9 </td> <td> 2^0 </td> <td> 2^0(2^-0.5R,2^0.5r) </td> <td> 1 </td> </tr>
  <tr> <td align="right"> 10 </td> <td> 2^0 </td> <td> 2^0d=2^0*4 </td> <td> 2 </td> </tr>
  <tr> <td align="right"> 11 </td> <td> 2^0 </td> <td> 2^0a1=2^0.5a0 </td> <td> sqrt(8)=2sqrt(2)=2.828427 </td> </tr>
  <tr> <td align="right"> 12 </td> <td> 2^0 </td> <td> 2^0a1(2^0.5a0)*4 </td> <td> sqrt(32)=4sqrt(2)=5.656854 </td> </tr>
  <tr> <td align="right"> 13 </td> <td> 2^0.5 </td> <td> 2^0.5(2^-0R,2^1r) </td> <td> sqrt(2)=1.414214 </td> </tr>
  <tr> <td align="right"> 14 </td> <td> 2^0.5 </td> <td> 2^0.5d=2^0.5*4 </td> <td> 2sqrt(2)=2.828427 </td> </tr>
  <tr> <td align="right"> 15 </td> <td> 2^0.5 </td> <td> 2^0.5a1=2^1a0 </td> <td> 4 </td> </tr>
  <tr> <td align="right"> 16 </td> <td> 2^0.5 </td> <td> 2^0.5a1(2^0a0)*4 </td> <td> 8 </td> </tr>
  <tr> <td align="right"> 17 </td> <td> 2^1 </td> <td> 2^1(2^1-0.5R,2^0.5r) </td> <td> 2 </td> </tr>
   </table>

![20190919145255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0e1f9518-2745-56d9-89e2-261e979304d6.png)
![20191018141703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3631892a-d9d9-307d-d590-04e6aaf336d5.png)

②<font color=green>x</font>と<font color=green>y</font>を結ぶ**線分長**は<font color=green>1</font>と<font color=green>sqrt(2)</font>の間を往復(<font color=blue>上掲の外接立方体と内接立方体の挙動に合致</font>)。一方座標{<font color=green>x,y</font>}と座標{<font color=green>x/2,y/2</font>}は正方形を描く。

* <font color=purple>x+y=1</font>(<font color=blue>θ=0→π/2</font>)(<font color=green>x=1→0,y=0→1</font>)
* <font color=purple>x+y=1</font>(<font color=blue>θ=π/2→π</font>)(<font color=green>x=0→-1,y=1→0</font>)
* <font color=purple>x+y=1</font>(<font color=blue>θ=π→3π/2</font>)(<font color=green>x=-1→0,y=0→-1</font>)
* <font color=purple>x+y=1</font>(<font color=blue>θ=3π/2→2π</font>)(<font color=green>x=0→1,y=-1→0</font>)

ちなみにまだ**二辺形**(<font color=blue>Bilateral</font>)状態と見て**関数**<font color=green>y=±1-abs(x)</font>によって**共役処理**(<font color=blue>Conjugated Operation</font>)する方法もありますが、結果はもちろん同じとなります(<font color=blue>素数2^n族に共通する特徴?</font>)。
[【初心者向け】方形描画関数①三角関数との関係。](https://qiita.com/ochimusha01/items/9183360c0009cfac5b04)
![image.gif](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fo%252Fochimusha01%252F20201113%252F20201113215700.gif%3Fixlib%3Drb-1.2.2%26auto%3Dformat%26gif-q%3D60%26q%3D75%26w%3D1400%26fit%3Dmax%26s%3D649f73dab93e1ded6b6e6ef40ef54585?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&w=1400&fit=max&s=ccde775be2407e12f32197d854b84a02)

#<font color=green>X+Y=1</font>が描くのは<font color=purple>アステロイド図形</font>そのものではない？
<font color=green>X+Y=1</font>の軌跡が**アステロイド図形**(<font color=blue>Astroid</font>)を描いている様に見えたので(<font color=blue>トーラス内を転がる</font>)**周回円**を重ねてみました。おやおや?
[アステロイド (曲線)-Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9%E3%83%86%E3%83%AD%E3%82%A4%E3%83%89_(%E6%9B%B2%E7%B7%9A))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/19857f34-a4b9-a0b4-8603-1cf52e8f55e9.png)
[【トーラス構造と古典数学】「単位円筒」から「トーラス構造」へ](https://qiita.com/ochimusha01/items/f6406e768aa24b8aea1a)
[【無限遠点を巡る数理】「半径だけの世界」から「直径もある世界」へ](https://qiita.com/ochimusha01/items/f53aed43bd720d008253)
![image.gif](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fo%2Fochimusha01%2F20201128%2F20201128212256.gif?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&w=1400&fit=max&s=cf34fc21bd9718cdd45e19fe015e6d88)

**大半径**(<font color=blue>Major Radius</font>)=<font color=green>2/sqrt(2),**小半径**(<font color=blue>Minor Radius</font>)=1</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218135503.gif)

```R
Square_XY<-function(Radius){
c0<-seq(-1,1,length=31)
cx<-c(rev(c0),c0[2:31])
c1<-seq(0,1,length=16)
cy<-c(c1,rev(c1[1:15]),-c1[2:16],-rev(c1[1:15]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)
for (i in rev_crcl[1:60]){
　segments(Re(i),0,0,Im(i),col=c(200,200,200))
}
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61)

#同心円
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1)

#回転円
s1cx<-cos(c0)+cx[Radian]/sqrt(2)*2
s1cy<-sin(c0)+cy[Radian]/sqrt(2)*2
par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色
abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。
legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=2/sqrt(2),Minor Radius=1"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYA.gif")
```
**大半径**(<font color=blue>Major Radius</font>)=<font color=green>1/sqrt(2),小半径(<font color=blue>Minor Radius</font>)=1/2</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218135728.gif)

```R
Square_XY<-function(Radius){

c0<-seq(-1,1,length=31)
cx<-c(rev(c0),c0[2:31])
c1<-seq(0,1,length=16)
cy<-c(c1,rev(c1[1:15]),-c1[2:16],-rev(c1[1:15]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)

for (i in rev_crcl[1:60]){
　segments(Re(i),0,0,Im(i),col=c(200,200,200))
}

}
Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61)

#同心円
cx<-cos(c0)
cy<-sin(c0)

plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1/2)

#回転円
s1cx<-cos(c0)/2+cx[Radian]/sqrt(2)
s1cy<-sin(c0)/2+cy[Radian]/sqrt(2)
par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。
legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=1/sqrt(2),Minor Radius=1/2"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYB.gif")
```
<font color=green>X+Y=1</font>の分割をさらに細かくしてみましたが、状況は何も変わりません。
**大半径**(<font color=blue>Major Radius</font>)=<font color=green>2/sqrt(2),**小半径**(<font color=blue>Minor Radius</font>)=1</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218142224.gif)

```R
Square_XY<-function(Radius){
c0<-seq(-1,1,length=101)
cx<-c(rev(c0),c0[2:101])
c1<-seq(0,1,length=51)
cy<-c(c1,rev(c1[1:50]),-c1[2:51],-rev(c1[1:50]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)
for (i in rev_crcl[1:200]){
segments(Re(i),0,0,Im(i),col=c(200,200,200))
}
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61)

#同心円
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1)

#回転円
s1cx<-cos(c0)+cx[Radian]/sqrt(2)*2
s1cy<-sin(c0)+cy[Radian]/sqrt(2)*2

par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。
legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=2/sqrt(2),Minor Radius=1"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYC.gif")
```
**大半径**(<font color=blue>Major Radius</font>)=<font color=green>1/sqrt(2),小半径(<font color=blue>Minor Radius</font>)=1/2</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218143202.gif)

```R
Square_XY<-function(Radius){
c0<-seq(-1,1,length=101)
cx<-c(rev(c0),c0[2:101])
c1<-seq(0,1,length=51)
cy<-c(c1,rev(c1[1:50]),-c1[2:51],-rev(c1[1:50]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)
for (i in rev_crcl[1:200]){
segments(Re(i),0,0,Im(i),col=c(200,200,200))
}
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61)

#同心円
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1/2)

#回転円
s1cx<-cos(c0)/2+cx[Radian]/sqrt(2)
s1cy<-sin(c0)/2+cy[Radian]/sqrt(2)
par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。

legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=1/sqrt(2),Minor Radius=1/2"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYD.gif")
```
周囲にも「**アステロイドもどき**」を貼るうちに明瞭になった事実。「<font color=purple>やはり描かれているのは円とは程遠い何か</font>」でした。まるで**量産品の冷凍ハンバーグ**みたいな形…
**大半径**(<font color=blue>Major Radius</font>)=<font color=green>2/sqrt(2),**小半径**(<font color=blue>Minor Radius</font>)=1</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218144123.gif)

```R
Square_XY<-function(Radius,x,y){
c0<-seq(-1,1,length=101)
cx<-c(rev(c0),c0[2:101])
c1<-seq(0,1,length=51)
cy<-c(c1,rev(c1[1:50]),-c1[2:51],-rev(c1[1:50]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)
for (i in rev_crcl[1:200]){
segments(Re(i)+x,0+y,0+x,Im(i)+y,col=c(200,200,200))
}
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61) 

#同心円
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1,0,0)
Square_XY(1,1,0)
Square_XY(1,-1,0)
Square_XY(1,0,1)
Square_XY(1,0,-1)
Square_XY(1,1,1)
Square_XY(1,1,-1)
Square_XY(1,-1,1)
Square_XY(1,-1,-1)

#回転円
s1cx<-cos(c0)+cx[Radian]/sqrt(2)*2
s1cy<-sin(c0)+cy[Radian]/sqrt(2)*2
par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2)*2,cy[Radian]/sqrt(2)*2,col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。

legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=2/sqrt(2),Minor Radius=1"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYE.gif")

```
**大半径**(<font color=blue>Major Radius</font>)=<font color=green>1/sqrt(2),小半径(<font color=blue>Minor Radius</font>)=1/2</font>の場合
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201218/20201218144353.gif)

```R
Square_XY<-function(Radius,x,y){
c0<-seq(-1,1,length=101)
cx<-c(rev(c0),c0[2:101])
c1<-seq(0,1,length=51)
cy<-c(c1,rev(c1[1:50]),-c1[2:51],-rev(c1[1:50]))
rev_crcl<-complex(real=cx*Radius,imaginary=cy*Radius)
for (i in rev_crcl[1:200]){
segments(Re(i)+x,0+y,0+x,Im(i)+y,col=c(200,200,200))
}
}

Simple_Vibration_XY<-function(Radian){
c0<-seq(0,pi*2,length=61) 

#同心円
cx<-cos(c0)
cy<-sin(c0)
plot(cx,cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="Simple Vibration X+Y=1",xlab="x=1→0→-1→0→1",ylab="y=0→1→0→-1→0", col=rgb(0,1,0))

#逆同心円
Square_XY(1/2,0,0)
Square_XY(1/2,1/2,0)
Square_XY(1/2,-1/2,0)
Square_XY(1/2,0,1/2)
Square_XY(1/2,0,-1/2)
Square_XY(1/2,1/2,1/2)
Square_XY(1/2,1/2,-1/2)
Square_XY(1/2,-1/2,1/2)
Square_XY(1/2,-1/2,-1/2)
#さらなる外周
Square_XY(1/2,1,0)
Square_XY(1/2,1,1/2)
Square_XY(1/2,1,-1/2)
Square_XY(1/2,-1,0)
Square_XY(1/2,-1,1/2)
Square_XY(1/2,-1,-1/2)
Square_XY(1/2,0,1)
Square_XY(1/2,1/2,1)
Square_XY(1/2,-1/2,1)
Square_XY(1/2,0,-1)
Square_XY(1/2,1/2,-1)
Square_XY(1/2,-1/2,-1)
Square_XY(1/2,1,1)
Square_XY(1/2,1,-1)
Square_XY(1/2,-1,1)
Square_XY(1/2,-1,-1)

#回転円
s1cx<-cos(c0)/2+cx[Radian]/sqrt(2)
s1cy<-sin(c0)/2+cy[Radian]/sqrt(2)
par(new=T)
plot(s1cx,s1cy,type="l",xlim=c(-1,1),asp=1,ylim=c(-1,1),main="",xlab="",ylab="", col=rgb(1,0,0))

polygon(s1cx, #x
s1cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

abline(h=0,col=rgb(0,0,0))
abline(v=0,col=rgb(0,0,0))
# x位置を書き添える 。
text(0,0,"0",col=rgb(0,0,1))
text(cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),"R",col=rgb(0,0,1))
segments(0,0,cx[Radian]/sqrt(2),cy[Radian]/sqrt(2),col=rgb(1,0,0))
lines(c(1,0,-1,0,1),c(0,1,0,-1,0),col=rgb(0,1,0))
# 凡例を書き添える 。
legend("bottomleft", legend=c("Circle(Radius=1,Augment=θ)","Major Radius=1/sqrt(2),Minor Radius=1/2"), lty =c(1,1),col=c(rgb(0,1,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=seq(1,59, length=60)
saveGIF({
for (i in Time_Code){
　Simple_Vibration_XY(i)
}
}, interval = 0.1, movie.name = "Simple_Vibration_XYF.gif")
```
以下の状況を「(<font color=blue>プログラミングを通じて</font>)<font color=purple>可視化したい</font>」なる当初の目的そのものはとりあえず一応は達成された訳ですが…
![image.gif](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fo%2Fochimusha01%2F20201128%2F20201128221702.gif?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&w=1400&fit=max&s=cecb56ac89da406db0ed31372a2bce45)
![image.gif](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fo%2Fochimusha01%2F20201129%2F20201129052126.gif?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&w=1400&fit=max&s=bd30a0faa64532dd402bc3bea85d4003)

①**トーラス表現**(<font color=blue>Torus Expression</font>)を用いると、最初の**奇数層**(<font color=blue>Odd Layer</font>)は**大半径**(<font color=blue>Major Radius</font>)が**対角線**(<font color=blue>Diagonal</font>)の半分の位置に現れる。
**2次元空間上**

* **小半径**(<font color=blue>Minor Radius</font>)=<font color=green>1</font>の時、**大半径**<font color=green>2/sqrt(2)</font>(<font color=blue>1.414214</font>)。
* **小半径**(<font color=blue>Minor Radius</font>)=<font color=green>1/2</font>の時、**大半径**<font color=green>1/sqrt(2)</font>(<font color=blue>0.7071068</font>)。

**3次元空間上**

* **小半径**(<font color=blue>Minor Radius</font>)=<font color=green>1</font>の時、**大半径**<font color=green>2/sqrt(3)</font>(<font color=blue>1.154701)。
* **小半径**(<font color=blue>Minor Radius</font>)=<font color=green>1/2</font>の時、**大半径**<font color=green>1/sqrt(3)</font>(<font color=blue>0.5773503</font>)。

②**関数**<font color=green>x+y=1</font>の軌跡を敷き詰めると、<font color=green>4個</font>(<font color=blue>2×2</font>)単位で中央に「<font color=purple>そこに収まる円に対応する図形</font>」が現れる。

…実はこの投稿をするまで中央に現れる「<font color=purple>そこに収まる円に対応する図形</font>」はもっと**円**に近く(<font color=blue>数値積分の様に</font>)**分割数引き上げによってさらなる近似制度が見込める**、そんな存在と勝手にイメージしてたんです。どうやら知識のアップデートが必要な様ですね。

#距離空間(<font color=blue>Metric Space</font>)概念の登場。

とりあえずこの辺りの説明が該当しそうですが、現段階では説明を読んでも何が何だかさっぱり分かりません。
[Lp空間 - Wikipedia](https://ja.wikipedia.org/wiki/Lp%E7%A9%BA%E9%96%93)

>数学の分野における**Lp空間**(<font color=blue>Lp Space</font>)とは、有限次元ベクトル空間に対する<font color=purple>p-ノルム</font>の自然な一般化を用いることで定義される関数空間である。**アンリ・ルベーグ**の名にちなんで**ルベーグ空間**としばしば呼ばれるが、<font color=purple>Bourbaki</font> (<font color=blue>1987</font>) によると初めて導入されたのは <font color=purple>Riesz</font> (<font color=blue>1910</font>) とされている。Lp空間は関数解析学における**バナッハ空間**や、**線型位相空間**の重要なクラスを形成する。物理学や統計学、金融、工学など様々な分野で応用されている。

* **ユークリッド距離**<font color=green>sqrt(x^2+y^2+z^2…)</font>が出発点で、**辺長**<font color=green>1</font>の**平方対角線**(<font color=blue>Square Diagonal</font>)が<font color=green>sqrt(2)</font>,**立方対角線**(<font color=blue>Cubic Diagonal</font>)が<font color=green>sqrt(3)</font>となるのを<font color=purple>L2空間</font>とし、これを一般化して<font color=purple>p-ノルム</font><font color=green>(x^p+y^p+z^p…)^(1/p)</font>と置いた。<br>[ノルムの意味とL1，L2，L∞ノルム](https://mathtrain.jp/lpnorm)
* <font color=purple>L1空間</font>の**マンハッタン距離**<font color=green>|x|+|y|+|z|</font>はどうやら今回投稿で扱った**絶対値関数**と関係が深いらしい。**並行**/**垂直移動**しか許されず上掲の場合の距離がそれぞれ「<font color=green>2</font>」「<font color=green>3</font>」となる？<br>[L1距離（マンハッタン距離）の意味と性質](https://mathtrain.jp/manhattan)
* <font color=purple>L∞空間</font>は定義が**マンハッタン距離**に似ているが行列式だと行と列の役割が入れ替わるらしい(<font color=blue>棒読み</font>)。**半径**<font color=green>r</font>の円が**一辺**<font color=green>2r</font>で軸に平行な正方形になるという。<br>[Lpノルムの極限がL∞ノルムであることを証明する](https://seetheworld1992.hatenablog.com/entry/2017/01/11/211714)

何せ今回の投稿で興味を引かれたのが以下だから難航は必死？

* **スーパー楕円**(<font color=blue>p=3/2</font>)…今回発見された「**量産型冷凍ハンバーグ**」との距離の近さを感じずにはいられない。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/4e78d6f1-1118-1fee-a87e-4eeae83e3337.png)
* **アステロイド**(<font color=blue>p=2/3</font>)…今回期待してた図形に近い。トーラス表現で**大半径**<font color=green>3/4</font>,**小半径**<font color=green>1/4</font>の小円が転がった軌跡らしい。<br>[アステロイド (曲線)](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9%E3%83%86%E3%83%AD%E3%82%A4%E3%83%89_(%E6%9B%B2%E7%B7%9A))<br>![image.gif](https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/HypotrochoidOn4.gif/200px-HypotrochoidOn4.gif)

むしろプログラミングの世界に持ち込めそうな以下の記事が一番有望に思えました。
[【機械学習】LPノルムってなんだっけ？](https://qiita.com/kenmatsu4/items/cecb466437da33df2870)
[線形回帰におけるLpノルム最適化をpythonの凸最適化ツールcvxpyで比較してみる](https://qiita.com/taka_horibe/items/9536931fbb26a6c51f6b)
というより数式が手に入った以上、とりあえず動かせる訳でして…

**テスト1**(<font color=blue>p=1/2,1,2,88</font>)
![Rplot19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/dfcd9c97-c8ea-a523-eb89-414443f60140.png)

```R
cx<-seq(0,1,length=61)
f0<-function(x,p){(1-(x^p))^(1/p)}
cy1<-f0(cx,1/2)
cy2<-f0(cx,1)
cy3<-f0(cx,2)
cy4<-f0(cx,88)
plot(cx,cy1,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,0,1))
par(new=T)
plot(cx,cy2,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,1,0))
par(new=T)
plot(cx,cy3,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)
plot(cx,cy4,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,0,1))
# 凡例を書き添える 。
legend("bottomleft", legend=c("p=0.5","p=1","p=2","p=88"), lty =c(1,1,1,1),col=c(rgb(1,0,1),rgb(0,1,0),rgb(1,0,0),rgb(0,0,1))) 
```
**テスト2**(<font color=blue>p=2/3,1,3/2,2</font>)

```R
cx<-seq(0,1,length=61)
f0<-function(x,p){(1-(x^p))^(1/p)}
cy1<-f0(cx,2/3)
cy2<-f0(cx,1)
cy3<-f0(cx,2)
cy4<-f0(cx,3/2)
plot(cx,cy1,type="l",xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,0,1))
par(new=T)
plot(cx,cy2,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,1,0))
par(new=T)
plot(cx,cy3,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)
plot(cx,cy4,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,0,1))
# 凡例を書き添える 。
legend("bottomleft", legend=c("p=2/3","p=1","p=3/2","p=2"), lty =c(1,1,1,1),col=c(rgb(1,0,1),rgb(0,1,0),rgb(0,0,1),rgb(1,0,0))) 
```
**テスト3**(<font color=blue>p=1/10,1,2,99</font>)
![Rplot03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f17b2c92-581b-ffba-f4d8-5d8b216a6952.png)

```R
cx<-seq(0,1,length=61)
f0<-function(x,p){(1-(x^p))^(1/p)}
cy1<-f0(cx,1/10)
cy2<-f0(cx,1)
cy3<-f0(cx,2)
cy4<-f0(cx,99)
plot(cx,cy1,type="l",xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,0,1))
par(new=T)
plot(cx,cy2,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,1,0))
par(new=T)
plot(cx,cy3,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)
plot(cx,cy4,type="l",xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,0,1))
# 凡例を書き添える 。
legend("bottomleft", legend=c("p=0.1","p=1","p=2","p=99"), lty =c(1,1,1,1),col=c(rgb(1,0,1),rgb(0,1,0),rgb(1,0,0),rgb(0,0,1))) 
```
**テスト4**(<font color=blue>p=1/10,1/2,1,2,99</font>)
![Rplot20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/31b37de1-c07d-9828-a85b-cb890403a65d.png)

```R
cx<-seq(0,1,length=61)
f0<-function(x,p){(1-(x^p))^(1/p)}
cy10<-f0(cx,1/10)
cy15<-f0(cx,1/2)
cy20<-f0(cx,1)
cy30<-f0(cx,2)
cy40<-f0(cx,99)
plot(cx,cy10,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,0,1))
par(new=T)
plot(cx,cy15,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,1,0))
par(new=T)
plot(cx,cy20,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,1,0))
par(new=T)
plot(cx,cy30,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)
plot(cx,cy40,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,0,1))
# 凡例を書き添える 。
legend("bottomleft", legend=c("p=0.1","p=0.5","p=1","p=2","p=99"), lty =c(1,1,1,1,1),col=c(rgb(1,0,1),rgb(1,1,0),rgb(0,1,0),rgb(1,0,0),rgb(0,0,1))) 
```
**テスト5**(<font color=blue>p=1/10,1/1.782273,1,2,99</font>)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0b6afc68-4de7-47d2-6dd4-373fb3dbc7ed.png)

```R
cx<-seq(0,1,length=61)
f0<-function(x,p){(1-(x^p))^(1/p)}
cy10<-f0(cx,1/10)
cy15<-f0(cx,1/1.782273)
cy20<-f0(cx,1)
cy30<-f0(cx,2)
cy40<-f0(cx,99)
plot(cx,cy10,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,0,1))
par(new=T)
plot(cx,cy15,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="p-Norm",xlab="",ylab="",col=rgb(1,1,0))
par(new=T)
plot(cx,cy20,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,1,0))
par(new=T)
plot(cx,cy30,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)
plot(cx,cy40,type="l",asp=1,xlim=c(0,1),ylim=c(0,1),main="",xlab="",ylab="",col=rgb(0,0,1))
# 凡例を書き添える 。
legend("bottomleft", legend=c("p=0.1","p=1/1.78…","p=1","p=2","p=99"), lty =c(1,1,1,1,1),col=c(rgb(1,0,1),rgb(1,1,0),rgb(0,1,0),rgb(1,0,0),rgb(0,0,1)),cex=0.8) 
```
ここに突如登場する数<font color=green>1/1.782273</font>(<font color=blue>=0.561081276</font>)は何かというと**pノウム**で「<font color=purple>L2空間の真逆の円弧が軌跡として現れるp値</font>」の近似値です。力任せで発見した後で数値検索をかけたら、**Python製凸最適化モデリングツールCVXPY**などが採用している模様…
[CVXPY matrix style modeling limits](http://yetanothermathprogrammingconsultant.blogspot.com/2019/11/cvxpy-matrix-style-modeling-limits.html)
[Python による数理最適化モデリングツール CVXPY の初歩](https://mirucacule.hatenablog.com/entry/2019/10/22/163106)

まぁ別にこれで理解が深まる訳でもないのですが、プログラムで動かせると「**途中で投げ出す**」確率が格段に下がるんです。そんな感じで以下続報…