球の中心と、その小円の中心を通る直線に全ての点からの垂線を下ろすと、全て1点にいきます。
実際は誤差のためばらけますが、このばらけを最小にする直線を求める、という方針で考えます。
垂線の足と中心との距離をLiとすると、Liの二乗平均-(Liの平均)の二乗、を最小にすればよいです。
まず、全ての点をX,Y,Z座標で表し、X座標の平均をSx,X座標の二乗の平均をSxx、X座標*Y座標の平均をSxyなどとおきます。
さらに分散・共分散行列の要素を以下のように計算します
Vxx = Sxx - Sx*Sx
Vyy = Syy - Sy*Sy
Vzz = Szz - Sz*Sz
Vxy = Sxy - Sx*Sy
Vyz = Syz - Sy*Sz
Vzx = Szx - Sz*Sx
ある方向(Nx,Ny,Nz)を向いた直線に垂線を下ろした場合のばらつきは、
Vxx*Nx*Nx + Vyy*Ny*Ny+ Vzz*Nz*Nz + 2*Vxy*Nx*Ny + 2*Vyz*Ny*Nz + 2*Vzx*Nz*Nx
となります。これを最小にする方向は、3x3行列
Vxx | Vxy | Vzx |
Vxy | Vyy | Vyz |
Vzx | Vyz | Vzz |
の3つの固有値のうち絶対値が一番小さいものに対応した固有ベクトルになります。
3x3実対称行列の固有ベクトルを計算するコードを探したんですが手軽なものは見つかりませんでした。
WEBアプリとして実装するのか、論文で使うのか、など用途によって必要なコードが違ってきますが。
「3x3行列」以降の部分を実際にどのようにすすめるのかが、わたしの能力不足のため理解できません。
1. まず、3x3行列のなかの9つの値の中で絶対値が一番小さいものを選ぶ、ということでしょうか。
2. そしてその一番小さい値を含む行が、中心Oから放射状に向かう固有ベクトルを示す座標になるのでしょうか。
3. その固有ベクトルをどのように用いて解を得たらよいのでしょうか。
せっかい回答いただいたのに理解不足で本当に申し訳ありません。