3球面の交点の計算式(下記)に基づいて、指定された3球面の交点を求めます。ホーム
以前、3球面の交点を求める計算式を紹介しましたが、そこではある特別な場合の手順の説明を省略しました。
ここでは、その場合の計算方法についても記載するとともに、簡単なアプリを作成しました。
・3球面の中心座標(xc, yc, zc)、半径 r を入力します。
・「計算」ボタンをクリックすると、計算結果(交点)を表示します。
●画面操作方法・画面左上の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となり、交点なし。 特別な場合に交点(交線)がありますが、ここでは省略。