[algo] Tracer un cercle

Tracer un cercle [algo] - Algo - Programmation

Marsh Posté le 11-01-2005 à 15:25:19    

Bonjour,
 
je dois tracer un cercle de diamètre saisie par l'utilisateur, mais je ne trouve pas comment faire.
 
le résultat peut être sous plusieurs formes, coordonnées entrées dans un tableau, ou encore affichage avec des * pour faire le tour, enfin c'est pas ce qui pose problème.
 
si vous avez des idées :sarcastic:

Reply

Marsh Posté le 11-01-2005 à 15:25:19   

Reply

Marsh Posté le 11-01-2005 à 15:31:51    

ca doit pas etre tellement compliqué, j'avais fait un truc du style en assembleur.
 
Poste deja un debut de solution, ca vaut mieux ;)


---------------
.
Reply

Marsh Posté le 11-01-2005 à 15:32:11    

x^2 + y^2 = 1
:D

Reply

Marsh Posté le 11-01-2005 à 15:33:05    

sous forme de tableau c'est très con :
double posX[1024];
double posY[1024];
double D=1;//diametre
int i;
for (i= 0 ; i < 1024 ; i++)
{
   posX[i] = D*cos(2*M_PI*1/i);
   posY[i] = D*sin(2*M_PI*1/i);
}
par contre avec des "*" dans une console c'est beaucoup plus chaud.

Reply

Marsh Posté le 11-01-2005 à 15:37:40    

regarde du coté de l'algo de bresenham...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-01-2005 à 16:01:03    

ouep sinon bête raisonne avec un triangle rectangle dans le cercle, pour connaitre le X des bords par rapport au Y:
 
tu descends de ligne en ligne de haut en bas du cercle (en Y), tu as besoin de connaitre le bord droit et le bord gauche. bin tu fous un triangle rectangle dans ton cercle, avec l'hypothénuse = rayon, coté adjacent = rayon vertical - déplacement en Y, et coté opposé = X.
 
je sais pas si ça va t'aider.

Reply

Marsh Posté le 11-01-2005 à 16:15:26    

Bresenham :
 

Citation :

void cercle(int r) {
int x,y,d ;
x = 0 ;
y = r ;
d = 1 - r ;
allume_pixel(x,y) ;
while ( y > x ) {
  if ( d < 0 )
    d += 2 * x + 3 ;
    else {
    d += 2 * (x - y) + 5 ;
    y-- ; }
  x++ ;
  allume_pixel(x,y) ; }
}

Reply

Marsh Posté le 11-01-2005 à 16:24:37    

Merci pascal_ pour ce site, ca pourrait me servir ultérieurement :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed