Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include <stdio.h> #include <math.h> //******************************************************************* // équation d'un cercle de centre (x0,y0) et de rayon R : // (x-x0)² + (y-y0)² = R² // // avec 3 point A, B et C non alignés, on peut trouver le // cercle passant par ces 3 points: // // les 3 équations de base (développées) : // (1) xA² + x0² - 2*xA*x0 + yA² + y0² - 2*yA*y0 = R² // (2) xB² + x0² - 2*xB*x0 + yB² + y0² - 2*yB*y0 = R² // (3) xC² + x0² - 2*xC*x0 + yC² + y0² - 2*yC*y0 = R² //// on réalise (2)' (2)-(1) et (3)' (3)-(1) // après simplification et réarrangement : // (2)' 2*x0*(xA-xB) + 2*y0*(yA-yB) = xA² - xB² + yA² - yB² // (3)' 2*x0*(xA-xC) + 2*y0*(yA-yC) = xA² - xC² + yA² - yC² // // (2)' A*x0 + B*y0 = C // (3)' D*x0 + E*y0 = F // // // système de 2 équations à 2 inconnues, calcul du déterminant // (si nul, le système n'a pas de solution unique et on n'a pas // affaire à un cercle) : // det = A*E - B*D // // les solutions sont : // x0 = (EC-BF)/det // y0 = (AF-DC)/det // // le rayon s'obtient ensuite : // R = sqrt( (xA-x0)² + (yA-y0)² ) //******************************************************************* int main(int argc, char* argv[]) { // les 3 points initiaux (cercle de centre (2,3) et de rayon 4, // correspondant à des angles de 60°, 150° et 225°)double xA 4.0000, yA 6.4641;double xB -1.4641, yB 5.0000;double xC -0.8284, yC 0.1716; // calcul de A, B, C, D, E, F et det double A = 2*(xA-xB); double B = 2*(yA-yB); double C = xA*xA - xB*xB + yA*yA - yB*yB; double D = 2*(xA-xC); double E = 2*(yA-yC); double F = xA*xA - xC*xC + yA*yA - yC*yC; double det = A*E - B*D;printf("A %lf, B %lf, C = %lf\r\n", A, B, C);printf("D %lf, E %lf, F = %lf\r\n", D, E, F); printf("det = %lf\r\n", det); if(det == 0) { printf("det = 0, ce n'est pas un cercle\r\n"); return 0; } // calcul de x0 et y0 double x0 = (E*C-B*F)/det; double y0 = (A*F-D*C)/det; printf("x0 = %lf\r\n", x0); printf("y0 = %lf\r\n", y0); // calcul de R double R = sqrt( (xA-x0)*(xA-x0) + (yA-y0)*(yA-y0) ); printf("R = %lf\r\n", R); return 0; }