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

0/5 (1 avis)

Vue 7 465 fois - Téléchargée 286 fois

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

Ajouter un commentaire Commentaire
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
13 mars 2003 à 08:37
salut,
toutes les déclarations des variables en C doivent être faites avant les autres instructions or dans ton code elles sont faites comme en C++ et cela génère des erreurs. par exemple (int i,j; qui ne servent même pas ici à supprimer)
il faudrait tout placer avant cette ligne

/* initialize graphics and local variables */ (située dans main)
de plus une fonction void retourne un return ;

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.