Traçage d'un cercle à partir de trois points

Description

Mon code réalise le traçage d'un cercle à partir de trois point donner par l'utilisateur.

Source / Exemple :


/*******************/
		       /* Nom   : OUMALEK */
		       /* Pr?nom: Mohamed */
		       /* Niveau:3GI      */
		       /*******************/
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<string.h>
#include<math.h>
#define N 400
#define Pi 3.14

//Fonction qui calcule l'?quation d'une droite
void CalculEquationDroite(float x1,float y1,float x2,float y2,float *a,float *b){

  • a=(x2-x1)/(y2-y1);
  • b=-((x2+x1)*(x2-x1)/2+(y2+y1)*(y2-y1)/2)/(y2-y1);
} //FONCTION QUI CALCUL le centre du cercle void CalculCentre(float a1,float b1,float a2,float b2,float *xc,float *yc){
  • xc=abs((b2-b1)/(a1-a2));
  • yc=abs(a1*(*xc)+b1);
} //La fonction qui dessine le cercle void DessinCercle(float oa,float Ox,float Oy){ float a; float x1,y1,x2,y2; x1=oa; y1=0; a=2*Pi/N; int i; for(i=0;i<N;i++){ x2=oa*cos(a*i); y2=oa*sin(a*i); line(x1+Ox,y1+Oy,x2+Ox,y2+Oy); x1=x2; y1=y2; } } //Le programme principale int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; char msg[80]; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } float a2,b2;//a2 et b2 sont definies tel que : y2=a2*x2+b2 l'equation de la droite float a1,b1;//a2 et b2 sont definies tel que : y1=a1*x1+b1 l'equation de la droite float xa,xb,xc,ya,yb,yc; //Les coordon?e des trois points a,b,c int i,j; printf("donner la valeur de xa :"); scanf("%f",&xa); printf("donner la valeur de ya :"); scanf("%f",&ya); printf("donner la valeur de xb :"); scanf("%f",&xb); printf("donner la valeur de yb :"); scanf("%f",&yb); printf("donner la valeur de xc :" ); scanf("%f",&xc); printf("donner la valeur de yc :"); scanf("%f",&yc); cleardevice(); moveto(xa,ya); sprintf(msg, " a(%d, %d)", getx(), gety()); outtextxy(xa, ya, msg); lineto(xb,yb); moveto(xb,yb); sprintf(msg, " b(%d, %d)", getx(), gety()); outtextxy(xb, yb, msg); lineto(xc,yc); moveto(xc,yc); sprintf(msg, " c(%d, %d)", getx(), gety()); outtextxy(xc, yc, msg); lineto(xa,ya); CalculEquationDroite(xa,ya,xb,yb,&a1,&b1); CalculEquationDroite(xc,yc,xb,yb,&a2,&b2); float Ox,Oy;//les coordon?e du centre CalculCentre(a1,b1,a2,b2,&Ox,&Oy); outtextxy(Ox,Oy,"*"); outtextxy(Ox+4,Oy+4,"O"); float oa;//Le rayon du cercle oa=sqrt((Ox-xa)*(Ox-xa)+(Oy-ya)*(Oy-ya));//Calcul du rayon DessinCercle(oa,Ox,Oy);//appel de la fonction qui dessine le cercle textcolor(10); sprintf(msg, " (%s est :%f , %s est :%f)", "l'abscisse du centre ",Ox,"l'ordon?e du centre",Oy); outtextxy(9,460, msg); /* clean up */ getch(); cleardevice(); outtextxy(150,230,"Programme fait par OUMALEK Mohamed"); getch(); closegraph(); return 0; }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.