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

Soyez le premier à donner votre avis sur cette source.

Vue 6 396 fois - Téléchargée 267 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

Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

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.