エクセル等の表計算ソフトの逆行列関数を使って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)
検算的グラフとデータは今は省略。
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] |
0 件のコメント:
コメントを投稿