Я думаю, вы также можете сделать это, используя анализ основных компонентов:
Вычислите среднее значение ваших очков:
C = (0,0,0);
for each point Ri in your dataset,
{ C += Ri; }
C = C * 1.0 / npoints;
Вычислите ковариационную матрицу ваших очков:
A = zeros(3,3);
for each point Ri in your dataset,
{
D = Ri - C;
A += D*D'; // outer product
}
Вычислить обратную величину A, A_inv:
A_inv = inv(A)
Выполнить итерации мощности, многократно применяя A_inv к случайному начальному вектору:
N = random vector.
for i=1:20 (or so)
{
N = A_inv*N;
N = normalize(N);
}
Смещение от начала координат до вашегоПлоскость k = точка (N, C).Уравнение, которое описывает вашу плоскость - это все точки R, такие что k = точка (N, R).