Peso mínimo quadrado - ajuste um plano ao conjunto de pontos 3D

Estou ajustando um plano a um ponto 3D definido com o método do quadrado mínimo. Eu já tenho um algoritmo para fazer isso, mas quero modificá-lo para usar o quadrado mínimo ponderado. Ou seja, tenho um peso para cada ponto (quanto maior o peso, mais próximo o avião deve estar do ponto

O algoritmo atual (sem peso) fica assim:

Calcule a soma:

for(Point3D p3d : pointCloud) {
    pos = p3d.getPosition();
    fSumX += pos[0];
    fSumY += pos[1];
    fSumZ += pos[2];
    fSumXX += pos[0]*pos[0];
    fSumXY += pos[0]*pos[1];
    fSumXZ += pos[0]*pos[2];
    fSumYY += pos[1]*pos[1];
    fSumYZ += pos[1]*pos[2];
}

do que fazer as matrizes:

double[][] A = {
    {fSumXX, fSumXY, fSumX},
    {fSumXY, fSumYY, fSumY},
    {fSumX,  fSumY,  pointCloud.size()}
};

double[][] B =  {
    {fSumXZ},
    {fSumYZ},
    {fSumZ}
};

do que resolver Ax = B e os 3 componentes da solução são os coeficientes da superfície plana montada ...

Então, você pode me ajudar como modificar isso para usar pesos? Obrigado

questionAnswers(6)

yourAnswerToTheQuestion