mikeo_410
  1. 2.地球
    1. 0.地球のWebGL
    2. 1.地球楕円体上の点
    3. 2.地球儀と楕円体の描画
    4. 3.3Dの直線と平面
    5. 4.卯酉線
    6. 5.楕円の標準形
    7. 6.5点で決まる楕円
    8. 7.曲率半径と平均曲率
    9. 8.楕円の弧の長さ
    10. 9.法線と鉛直線
    11. 10.まっすぐ進む
    12. 11.球面の正方形
    13. 12.航程線とメルカトル図法
    14. A1.地図、地球儀(Rスクリプト、データ)
    15. A2. 付録6.計算式集の公式

5点で決まる楕円

楕円の式は、

A{x}^{2}+Bxy+C{y}^{2}+Dx+Ey+F=0

ただし、{{B}^{2}-4AC\leq{}0}^{\ }

のように、2次曲線の式で表されます。

この式の係数は6つですが、楕円の周上の5点の座標値から、楕円の式の係数を決定できます。

式に任意の定数を乗じても同じ楕円を描くので、同じ楕円を描く式は無数にあります。したがって、定数項 F は任意の値で良く、例えば、F=-1 として他の5つの係数を求めて良いということです。

A{x}^{2}+Bxy+C{y}^{2}+Dx+Ey=1

に、5点の座標値を代入して5つの式を作成し連立方程式を解きます。

  1. EllipseCoeff <- function(x, y){
  2.   x <- x[1:5]; y <- y[1:5]
  3.   M <- matrix(c(x^2,x*y,y^2,x,y),5,5)
  4.   u <- solve(M,c(1,1,1,1,1))
  5.   list(A=u[1],B=u[2],C=u[3],D=u[4],E=u[5],F=-1)
  6. }

  1. plot(0,0,pch=20,xlim=c(-5,5),ylim=c(-3,3),
  2.   xlab="x",ylab="y")
  3. abline(v=c(-4,0,4,2),h=c(-2,0,2,sqrt(3)),
  4.   col=c("gray60","black","gray60","gray60"))
  5. abline(a=0,b=sqrt(3)/2,col="gray60")
  6. a <- 4; b <- 2 # 楕円の半径
  7. t <- seq(0,2*pi,length.out=361) # 媒介変数
  8. x <- a*cos(t); y <- b*sin(t) # 1°刻みの座標値
  9. lines(x,y) # 基本の楕円の描画
  10. # 媒介変数0,90,180,270°の4点と、60°の5点
  11. I <- c(0,90,180,270,60)+1
  12. points(x[I],y[I],pch=16,col="red")

上の図は、x軸半径 4、y軸半径 2 の楕円です。式では、

        \frac{{x}^{2}}{{4}^{2}}+\frac{{y}^{2}}{{2}^{2}}=1

あるいは、64を乗じて、

        4{x}^{2}+16{y}^{2}-64=0

などと表されます。

上のスクリプトでは、楕円は媒介変数 t を1° 刻みに採って、0°、90°、180°、270° の4点と、60°の点を合わせて5点に赤丸を描いています。

この5点の座標値から、楕円の式を求めると以下のようになります。

  1. r$> u <- EllipseCoeff(x[I],y[I])
  2. r$> str(u)
  3. List of 6
  4.  $ A: num 0.0625
  5.  $ B: num 0
  6.  $ C: num 0.25
  7.  $ D: num 7.24e-33
  8.  $ E: num 2.78e-17
  9.  $ F: num -1

        0.0625{{x}^{2}+0.25{y}^{2}-1=0}^{\ }

なので、64を乗じれば、上述の、

        4{x}^{2}+16{y}^{2}-64=0

となります。

この楕円を30°反時計回りに回転し、x軸方向に √3 、y軸方向に 2 平行移動します。

  1. plot(0,0,pch=20,xlim=c(-5,6),ylim=c(-3,5),xlab="x",ylab="y")
  2. abline(v=0,h=0)
  3. a <- 4; b <- 2 # 楕円の半径
  4. t <- seq(0,2*pi,length.out=361) # 媒介変数
  5. x <- a*cos(t); y <- b*sin(t) # 1°刻みの座標値
  6. lines(x,y) # 基本の楕円の描画
  7. # 媒介変数0,90,180,270°の4点と、60°の5点
  8. I <- c(0,90,180,270,60)+1
  9. points(x[I],y[I],pch=16,col="red")
  10. # 反時計回りに 30° 回転
  11. cs <- cos(pi/6); sn <- sin(pi/6)
  12. xy <- rbind(c(cs,-sn),c(sn,cs)) %*% rbind(x,y)
  13. lines(xy[1,],xy[2,],col="cyan") # 30° 回転した楕円の描画
  14. points(xy[1,I],xy[2,I],pch=16,col="green") # その5点
  15. # 平行移動
  16. x2 <- xy[1,]+sqrt(3); y2 <- xy[2,]+2
  17. lines(x2,y2,lwd=2) # 回転、平行移動した楕円の描画
  18. points(x2[I],y2[I],pch=16,col="blue") #  その5点

5点の座標値は、以下のような値です。

  1. r$> round(x2[I],3);round(y2[I],3)
  2. [1]  5.196  0.732 -1.732  2.732  2.598
  3. [1] 4.000 3.732 0.000 0.268 4.500

元の楕円の周上の点を(x, y)、回転、平行移動した楕円の周上の点を (x’, y’) とすると、

        cos\frac{\pi{}}{6}=\frac{\sqrt{3}}{2}\ ,\ \ sin\frac{\pi{}}{6}=\frac{1}{2}

なので、

        x'=\frac{\sqrt{3}}{2}x-\frac{1}{2}y+\sqrt{3}

        y'=\frac{1}{2}x+\frac{\sqrt{3}}{2}y+2

x

y

=>

x’

y’

4

0

3√3

4

0

2

√3-1

√3+2

-4

0

-√3

0

0

-2

√3+1

2-√3

2

√3

3√3/2

9/2

  1. r$> u <- EllipseCoeff(x2[I],y2[I])
  2.     str(u)
  3. List of 6
  4.  $ A: num 0.259
  5.  $ B: num -0.385
  6.  $ C: num 0.481
  7.  $ D: num -0.128
  8.  $ E: num -1.26
  9.  $ F: num -1

mxima で連立方程式を作って解くと以下のようになります。

5点を通る楕円は、

\frac{7}{27}{x}^{2}-\frac{2}{3\sqrt{3}}xy+\frac{13}{27}{y}^{2}-\frac{2}{9\sqrt{3}}x-\frac{34}{27}y=1

となります。あるいは、27を乗じた、

7{x}^{2}-6\sqrt{3}xy+13{y}^{2}-2\sqrt{3}x-34y-27=0

と表せます。


題目一覧へmikeo_410@hotmail.com(updated: 2022/12/17)