2023年10月7日土曜日

4点を通る球面(3次元空間内)

エクセル等の表計算ソフトの逆行列関数を使って4点を通る球面を求める。(3次元空間内)

「3点を通る円(2次元平面内)」と全く同じ方法で求める。

まず求める球面の式を

 x^2+y^2+z^2+l*x+m*y+n*z+o=0

とすると

 l*x+m*y+n*z+o=-(x^2+y^2+z^2)

なので4点を

 p1(x1,y1,z1)、p2(x2,y2,z2)、p3(x3,y3,z3)、p4(x4,y4,z4) (表のD4:F7)

とすると

 l*x1+m*y1+n*z1+o=-(x1^2+y1^2+z1^2)

 l*x2+m*y2+n*z2+o=-(x2^2+y2^2+z2^2)

 l*x3+m*y3+n*z3+o=-(x3^2+y3^2+z3^2)

 l*x4+m*y4+n*z4+o=-(x4^2+y4^2+z4^2)

となる。行列の式で書けば(libreofficecalcでmathをオブジェクトとして使用)

 


となり、逆行列を使えば一発で答えが出る。



逆行列と配列定数を使用してl,m,n,oを求める。配列定数を使って前半は4行3列の行列の1~3列目の順を逆にして4列目を追加して4列目を1とした。後半は2乗して横方向の和。

 D8:D11 =ArrayFormula(mmult(MINVERSE(mmult(D4:F7,{0,0,1,0;0,1,0,0;1,0,0,0})+{0,0,0,1;0,0,0,1;0,0,0,1;0,0,0,1}),-MMULT(D4:F7^2,{1;1;1})))

次に中心座標と半径を求める。

 中心z D12 =-D10/2

 中心y E12 =-D9/2

 中心x F12 =-D8/2

 半径^2 D13 =((D8^2/4+D9^2/4+D10^2/4)-D11)

 半径 D14 =((D8^2/4+D9^2/4+D10^2/4)-D11)^(1/2)


B C DE F
2
3 zy x
4 p1 0.0 0.0 0.0
5 p2 0.0 1.0 0.0
6 p3 1.01.0 1.0
7 p4 0.0 0.0 2.0
8 l -2.000
9 m -1.000
10 n 0.000
11 o 0
12 中心 0.000 0.500 1.000
13 半径^2 1.250
14 半径 1.118


検算的グラフとデータは今は省略。


2023.10.07 20:49公開 単純ミスなどは適宜修正済&修正予定

余談1


以下テスト用


htmlの表を使った行列の式の残骸w

 [x1 y1 z1 1][l] [x1^2+y1^2+z1^2]
 [x2 y2 z2 1][m]=-[x2^2+y2^2+z2^2]
 [x3 y3 z3 1][n] [x3^2+y3^2+z3^2]
 [x4 y4 z4 1][o] [x4^2+y4^2+z4^2]

 [l] [x1 y1 z1 1]^-1[x1^2+y1^2+z1^2]
 [m]=-[x2 y2 z2 1] [x2^2+y2^2+z2^2]
 [n] [x3 y3 z3 1] [x3^2+y3^2+z3^2]
 [o] [x4 y4 z4 1] [x4^2+y4^2+z4^2]