Régression parabolique non triviale
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:31
a=-0.061857, b=-0.0941683, c=-0.112667
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 12:37
et ton t ?
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:41
t=0.581195
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:43
désolé je n'avais pas mis le sommet en (0,0) voici mes résultats :
a= 1.91461 b= 2.14439 c= 2.87474 t=0.728849
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 12:49
le t est bon (le plus compliqué), mais pas le c (le plus simple !)
Fais voir à nouveau ton code s'il te plait.
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:49
- Code: Tout sélectionner
void Parabole::fit2(std::vector<cv::Point2d> points, cv::Point2d sommet) {
this->sommet = sommet;
int n = points.size();
cout << "sommet = " << sommet << endl;
points = translatePoint2ds(points, sommet);
double bestTheta = 0;
double minimum = std::numeric_limits<double>::infinity();
for (double theta = 0; theta <= CV_PI; theta += CV_PI / 1000) {
vector<Point2d> rotated = rotatePoint2ds(points, theta);
double E1 = 0;
for (int i = 0; i < n; i++) {
E1 += pow(rotated[i].x, 4);
}
double E2 = 0;
for (int i = 0; i < n; i++) {
E2 += pow(rotated[i].x, 2) * rotated[i].y;
}
double E3 = 0;
for (int i = 0; i < n; i++) {
E3 += pow(rotated[i].y, 2);
}
double delta = E1 - (pow(E2, 2) / E3);
if (delta < minimum) {
minimum = delta;
bestTheta = theta;
}
}
this->theta_radians = bestTheta;
this->theta = bestTheta * 180 / CV_PI;
vector<Point2d> rotated = rotatePoint2ds(points, bestTheta);
double E2 = 0;
for (int i = 0; i < n; i++) {
E2 += pow(rotated[i].x, 2) * rotated[i].y;
}
double E3 = 0;
for (int i = 0; i < n; i++) {
E3 += pow(rotated[i].y, 2);
}
this->c = E2 / E3;
this->a = sin(theta_radians) * c;
this->b = cos(theta_radians) * c;
cout << "a= " << a << " b= " << b << " c= "<<c<<" t="<<bestTheta<<endl;
}
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:50
c'est un peu comme tout à l'heure le theta était bon mais pas le a
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 12:55
Je ne comprends pas vraiment d'où vient le souci. J'ai remplacé E2 et E3 (déjà utilisées avant dans le programme) par F2 et F3
- Code: Tout sélectionner
(...)
this->theta = bestTheta * 180 / CV_PI;
vector<Point2d>rotated = rotatePoint2ds(points, bestTheta);
double F2 = 0;
for (int i = 0; i < n; i++) {
F2 += pow(rotated[i].x, 2) * rotated[i].y;
}
double F3 = 0;
for (int i = 0; i < n; i++) {
F3 += pow(rotated[i].y, 2);
}
this->c = F2 / F3;
Peux tu me montrer les valeurs des 2*3 = 6 coordonnées de rotated suite au calcul rotatePoint2ds(points, bestTheta)
?
Modifié en dernier par
leon1789 le 22 Juin 2023, 12:57, modifié 1 fois.
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:57
je te donne l'affichage du rotated juste avant le calcul du c :
rotated=[6.79339958680754, 7.406059819766725;
6.766821943292685, 19.44762506805838;
-5.168236383494186, 8.791435189110304]
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 12:59
à mon avis c'est le même problème que dans l'ancien algo, un problème obscur de variables en C++
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 13:00
sylvain231 a écrit:je te donne l'affichage du rotated juste avant le calcul du c :
rotated=[6.79339958680754, 7.406059819766725;
6.766821943292685, 19.44762506805838;
-5.168236383494186, 8.791435189110304]
Ca, c'est bon.
Modifié en dernier par
leon1789 le 22 Juin 2023, 13:01, modifié 2 fois.
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:00
une ligne par point, le premier nombre est le x, le deuxième le y séparés par une virgule
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 13:01
Il faut tracer après chaque opération, car on ne voit rien de rien
Quelles sont les valeurs de F2 et de F3 au moment du calcul de c ?
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:03
E2=1467.12
E3=510.349
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 13:04
sylvain231 a écrit:E2=1467.12
E3=510.349
C'est bon aussi !
alors que ton c doit valoir 2.8747 .... non ?
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:04
mais vérifie aussi le rotated
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:05
oui il vaut cela
-
leon1789
- Membre Transcendant
- Messages: 5478
- Enregistré le: 27 Nov 2007, 15:25
-
par leon1789 » 22 Juin 2023, 13:06
sylvain231 a écrit:oui il vaut cela
ah !! c'est tout bon alors.
Avant il valait cela :
sylvain231 a écrit:c=-0.112667
Maintenant, redonne les valeurs de t,c,a,b s'il te plait.
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:06
je viens de prendre la calculette Windows et c'est bon !
-
sylvain231
- Membre Relatif
- Messages: 307
- Enregistré le: 07 Avr 2020, 12:20
-
par sylvain231 » 22 Juin 2023, 13:07
a= 1.91461 b= 2.14439 c= 2.87474 t=0.728849
tu n'as pas dû voir mon message quand je disais que j'avais oublié de mettre le sommet en (0,0)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 14 invités