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

 


Dernière réponse
Sujet : [C++] Prenons une forme simple... un cercle par exemple :)
darkoli 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
darkoli 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
BENB

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...

tgrx 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]

janoscoder 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.
tgrx Thx :hello:
darkoli ben y'a une methode tres rapide c'est le tracé de cercle de brensenham.
 
http://www.citeweb.net/discase/8/CERCLE.htm
tgrx 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:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)