Hallo Ich möchte einen Kreis von kleinsten quadratischen method mit viel Punkt finden Ich schrieb diesen Code, aber es ist nicht funktionieren und keine Fehlermeldung (Mein Code hat eine Funktion, die FittingCircle I glaube, meine Funktion (FittingCircle) falsch ist, aber ich kann meine Fehler nicht finden)Fit einen Kreis von Least Square Methode
Dank Ihrer Adanced
#include <iostream>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#define A(i,j) A[i + j * 3]
using namespace std;
bool FittingCircle(double* A, double* B)
{
double Sum;
double Diagonal[3];
Sum= A(0,0);
if (Sum <= 0.f) return false;
Diagonal[0]= sqrt(Sum);
Sum= A(0,1);
A(1,0)= Sum/Diagonal[0];
Sum= A(0,2);
A(2,0)= Sum/Diagonal[0];
Sum= A(1,1) - A(1,0) * A(1,0);
if (Sum <= 0.f) return false;
Diagonal[1]= sqrt(Sum);
Sum= A(1,2) - A(1,0) * A(2,0);
A(2,1)= Sum/Diagonal[1];
Sum= A(2,2) - A(2,1) * A(2,1) - A(2,0) * A(2,0);
if (Sum <= 0.f) return false;
Diagonal[2]= sqrt(Sum);
Sum= B[0];
B[0]= Sum/Diagonal[0];
Sum= B[1] - A(1,0) * B[0];
B[1]= Sum/Diagonal[1];
Sum= B[2] - A(2,1) * B[1] - A(2,0) * B[0];
B[2]= Sum/Diagonal[2];
Sum= B[2];
B[2]= Sum/Diagonal[2];
Sum= B[1] - A(2,1) * B[2];
B[1]= Sum/Diagonal[1];
Sum= B[0] - A(1,0) * B[1] - A(2,0) * B[2];
B[0]= Sum/Diagonal[0];
return true;
}
int main(int argc, char** argv) {
double matris[3]={25,30,50};
double matris2[3]={40,25,50};
FittingCircle(matris,matris2);
return 0;
}
Ok! Vielen Dank Jetzt bin ich verwirrt Was sollte in Matris stattdessen schreiben Zum Beispiel – aspodap
Ich schrieb diese, aber ich kann kein Ergebnis erhalten Doppel-Matris [8] = {25,30,50,40,20,71,43,78 }; double matris2 [8] = {40,25,50,42,35,74,53,24}; FittingCircle (Matris, Matris2); Rückgabe 0; – aspodap
@aspodap - Ich kenne Ihren Algorithmus nicht, also weiß ich nicht, was Sie genau machen müssen. Aber wenn Sie 'A [8]' (also 'matris [8] ') lesen, muss' mastris' ** ** mindestens 9-stellig sein, also' doppelte matris [9] = {/ * neun Werte * /}; '. Über 'matris2' sehe ich, dass man nur in den Positionen 0, 1 und 2 liest und schreibt. Also sollte 'double matris2 [3] = {/ * drei valuse * /}; 'genug sein. – max66