Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
541 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] Prenons une forme simple... un cercle par exemple :)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Prenons une forme simple... un cercle par exemple :)

n°41591
tgrx
My heart is pumping for love
Posté le 21-06-2001 à 10:26:00  profilanswer
 

Je vous expose mon probleme : je dois tracer un cercle de centre (x0,y0) et de rayon r dans un plan.
 
un algo tout bete serait :  
 
for (float theta=0; theta<=360; theta+= increment)
  drawpoint(x0+r*cos(theta),x0+r*sin(theta));
 
Je precise que les coordonnees finales sont entieres.
Tout le probleme reside dans le choix de increment.  
Ex: pour un cercle de rayon 1, il suffit de choisir increment=360.
Pour un cercle de rayon 2, il suffit de choisir increment=90.
 
Tout le probleme reside dans le choix de increment pour un cercle de rayon n, tout en evitant de donner la valeur 0.0000001 qui fonctionne pour tout cercle, mais est tres lent (je veux un truc qui va vite).
 
Pour l'instant, j'ai mis increment= 360/(4*rayon), mais malheureusement j'ai quelques bugs d'affichage qui restent... :sarcastic:

mood
Publicité
Posté le 21-06-2001 à 10:26:00  profilanswer
 

n°41600
darkoli
Le Petit Dinosaure Bleu
Posté le 21-06-2001 à 10:30:34  profilanswer
 

ben y'a une methode tres rapide c'est le tracé de cercle de brensenham.
 
http://www.citeweb.net/discase/8/CERCLE.htm

n°41604
tgrx
My heart is pumping for love
Posté le 21-06-2001 à 10:33:28  profilanswer
 

Thx :hello:

n°41874
janoscoder
Posté le 21-06-2001 à 20:06:48  profilanswer
 

rx,
y'a moy de faire plein de trucs avec Bresenham, genre des paraboles,  des coniques, enfin plein de trucs avec de trucs polynomiaux, mais pas avec un deg trop élevé sinon ça devient atroce.

n°41983
tgrx
My heart is pumping for love
Posté le 22-06-2001 à 10:46:56  profilanswer
 

Ben en fait mon probleme est plus complique que ca (enfin du moins en apparence).  
 
Le truc c'est que je dois definir un volume de revolution a partir d'une image x*y. Par exemple je fais tourner l'image autour de l'axe x=0 pour avoir un machin cylindrique.  
 
Alors je pensais simplement prendre chaque point de l'image et dessiner le cercle centre sur l'axe x=0 et passant par le point en question, tel que tous les points du cercle ont la valeur du pixel original de l'image.  
 
Ca marche, sauf que j'ai evidemment des trous par endroit, parce que lorsque l'on trace des cercles concentriques de rayon 1,....,n on ne remplit pas exactement un disque de rayon n, il y a des endroits ou ca foire a cause des approximations entieres... :(

 

[edit]--Message édité par tgrx--[/edit]

n°42040
BENB
100% Lux.
Posté le 22-06-2001 à 14:00:52  profilanswer
 

tgrx a écrit a écrit :

Ben en fait mon probleme est plus complique que ca (enfin du moins en apparence).
 
 
 
Le truc c'est que je dois definir un volume de revolution a partir d'une image x*y. Par exemple je fais tourner l'image autour de l'axe x=0 pour avoir un machin cylindrique.
 
 
 
Alors je pensais simplement prendre chaque point de l'image et dessiner le cercle centre sur l'axe x=0 et passant par le point en question, tel que tous les points du cercle ont la valeur du pixel original de l'image.
 
 
 
Ca marche, sauf que j'ai evidemment des trous par endroit, parce que lorsque l'on trace des cercles concentriques de rayon 1,....,n on ne remplit pas exactement un disque de rayon n, il y a des endroits ou ca foire a cause des approximations entieres... :(
 
 




et en prenant l'eqution Y2+Z2=R2 pour tes cercles
tu calcules Y a partir de Z, puis Z a partir de Y en fonction de l'orientation de la derivee, et tu trace deux points a chaque fois ex: tu trouves Z=2.7 -> tu traces Z=2 et Z=3 (2<2.7<3)
Le risque c'est que ce soit un peu gras... mais la methode permet de controler les erreurs d'arrondis...

n°42052
darkoli
Le Petit Dinosaure Bleu
Posté le 22-06-2001 à 14:23:14  profilanswer
 

pour continuer sur ce que disais BENB, tu as la méthode du cercle lissé.
 
Tu veux faire un cercle de couleur noir par exemple.
Tu dois ah un moment donné dessiner le pixels x=2.7,y=2.3, forcement va y avoir un probleme et il faudra faire un choix, au lieu de chosir le pixel (3,2) et de faire un arrondie, ben tu peux faire autrement :
 
tu mets 21% de noir dans p(2,2) (0.3*0.7=0.21)
tu mets 49% de noir dans p(3,2) (0.7*0.7=0.49)
tu mets  9% de noir dans p(2,3) (0.3*0.3=0. 9)
tu mets 21% de noir dans p(3,3) (0.7*0.3=0.21)
 
voila, c'est pas tres clair mais en general ca marche bien


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] Prenons une forme simple... un cercle par exemple :)

 

Sujets relatifs
[C++] Ca doit être simple mais je comprends pas...Mise en forme d'un programme
Comment faire un sondage simple ?simple question ..........ASP..........
C++, prog Win32, question simple de débutant ![javascript] tres tres simple !
[javascript] un truc simple...PHP et Expressions régulières : un pb tout simple.
question simple HTML ![HTML] aligner du texte en suivant en cercle ?
Plus de sujets relatifs à : [C++] Prenons une forme simple... un cercle par exemple :)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR