■ 3球面の交点を求める (JavaScript版)

 3球面の交点の計算式(下記)に基づいて、指定された3球面の交点を求めます。

 以前、3球面の交点を求める計算式を紹介しましたが、そこではある特別な場合の手順の説明を省略しました。
 ここでは、その場合の計算方法についても記載するとともに、簡単なアプリを作成しました。

 ・3球面の中心座標(xc, yc, zc)、半径 r を入力します。
 ・「計算」ボタンをクリックすると、計算結果(交点)を表示します。


球No.xcyczc半径 r
1:
2:
3:

   角度刻み:   2球の交線表示

●画面操作方法
・画面左上の3x3のメニュー(L,R,U,D,O,XY,XZ,YZ)で左右、上下、初期状態復帰、平面図指示。
・角度刻みは変更可能。
・マウスホイールで拡大縮小が可能。
・マウスのドラッグ&ドロップで座標系の平行移動が可能。
・各2球の交線(あれば 円)を表示できます。
・左上の小座標系の下の数値は各軸方向の実長を示す。

●3球面の交点の計算式
・Pi(xi, yi, zi)[i=1,2,3] を中心とする半径ri[i=1,2,3]の球の交点P(x,y,z)は次の3元連立方程式を
 解くことで求められます。
  (x1-x)2 + (y1-y)2 + (z1-z)2 = r12 ・・・(式1.1)
  (x2-x)2 + (y2-y)2 + (z2-z)2 = r22 ・・・(式1.2)
   (x3-x)2 + (y3-y)2 + (z3-z)2 = r32 ・・・(式1.3)
・(式1.2)および(式1.3)から(式1.1)を引いて整理すると
   (x2-x1)x + (y2-y1)y + (z2-z1)z = -(A2-A1)/2 ・・・(式2.1)
   (x3-x1)x + (y3-y1)y + (z3-z1)z = -(A3-A1)/2 ・・・(式2.2)
    ここで、
     Ai = ri2 - xi2 - yi2 - zi2  [i=1,2,3] 
  また、
   xij = xi-xj, yij = yi-yj, zij = zi-zj  [i=1,2,3]
   Ai1 = -(Ai-A1)/2                       [i=2,3]
  とおくと(式2.1)、(式2.2)は
   x21x + y21y + z21z = A21          ・・・(式3.1)
   x31x + y31y + z31z = A31          ・・・(式3.2)
・(式3.1)、(式3.2)より
   x = [(A21y31 - A31y21) + (y21z31 - y31z21)z] / D ・・・(式4.1)
   y = [(A31x21 - A21x31) + (x31z21 - x21z31)z] / D ・・・(式4.2)
  あるいは、
   x = B0 + B1z                   ・・・(式5.1)
   y = C0 + C1z                   ・・・(式5.2)
  ここで、
     D = x21y31 - y21x31   (≠0 とする、注1)
     B0 = (A21y31 - A31y21)/D, B1 = (y21z31 - y31z21)/D
     C0 = (A31x21 - A21x31)/D, C1 = (x31z21 - x21z31)/D
・(式5.1)、(式5.2)を(式1.1)に代入して整理すると、zに関する次の2次方程式が得られます。
   Ez2 + 2Fz + G = 0            ・・・(式6)
  ここで、
     E = B12 + C12 + 1
     F = B1(B0-x1) + C1(C0-y1) - z1
     G = (B0-x1)2 + (C0-y1)2 + z12 - r12
・この2次方程式を解くと((F2 - EG)1/2≧0 として)
   z = [ -F ± (F2 - EG)1/2 ] / E ・・・(式7)
 これを(式5.1)、(式5.2)に代入すると x、y が得られます。

(注1)D = 0の場合は別の手順で計算する必要があります(後述)。
(注2)判別式:(F2 - EG) が負のとき、交点なし。
●D = 0 の場合の計算方法(1方法)
・D は3点:P1、P2、P3 を通る平面の法線ベクトルのz成分です。
  これが0の場合は、x、y をz の式として表現することができません。
・この場合、ここでは座標変換(軸切替)で対応しています。
  即ち、値
      Dx = y21*z31 - z21*y31;  (法線ベクトルのx成分)
      Dy = x21*z31 - z21*x31;  (法線ベクトルのy成分)
  を計算し、
   Dx ≠ 0 のとき: x -> Y, y -> Z, z -> X
   Dy ≠ 0 のとき: x -> Z, y -> X, z -> Y
  のように軸切替を行って前述の計算式で交点を計算します。
・計算された交点座標を本来の軸に戻します。
・P1、P2、P3が1直線上にあるときは、D、Dx、Dy すべて0となり、交点なし。
  特別な場合に交点(交線)がありますが、ここでは省略。

ホーム