Algo cercle vs Circle()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Algo cercle vs Circle()

Message par garzul »

:D Bonjour / Bonsoir voici un algo que j'ai trouver trés simple ( Plus simple que ce qu'o,n utilise normalement pour faire un cercle ) et je l'ai comparer a la comande PB et je me suis aperçus que sa donner pour l'algo un avantage de temps ( Pas beaucoup ^^ ) Mais sa peut toujours servir vus que c'est l'exemple le plus simple pour faire un cercle assez rapide come bresenham Voila le code :)

Code : Tout sélectionner

;********************************
;*            Cercle            *
;*             Algo             *
;*                              *
;*         Garzul | 2004        *
;********************************

Procedure DrawCircle(Parameter)
  
  angle = 0 ; l'angle a 0
  x     = 0
  y     = 0
  
  Repeat ;********* BOUCLE **********
    
    If StartDrawing(WindowOutput()) ; On ecris sur l'ecran (dessine^^)
      
      For e = 200 To 1 Step -1
       
      For i = 0 To 360
        
        angle = i
        x = 300 + e * Cos(angle) ; ici on affiche x + rayon * cosinus de l'angle donc 360
        y = 350 + e * Sin(angle) ; Pareil ici pour y sauf on rajoute sinus
        Plot(x,y,RGB($76,$BD,$42)) ; Ondessine au coordoner
        
      Next
      
      Next
      
      DrawingMode(4)
      
      For i = 200 To 1 Step -1
        
        Circle(700,350,i,RGB($F3,$C,$3A))
        
      Next
      
      EndIf
      
      StopDrawing() ; On arrete de dessiner

    
    ;Rayon + 1 <===========A essayer sa donne un effet
    
  ForEver
  
  
EndProcedure


If OpenWindow(0, 0, 0, 1020, 700, #PB_Window_SystemMenu, "Algo de cercle") ; Lancement de la fenetre
  
  CreateThread(@DrawCircle(), 0) ;Affichage du cercle
  
  Repeat
  Until WaitWindowEvent() = #PB_EventCloseWindow ; Si on clique sur la croix
  
EndIf
Dites moi si vous trouvez des avantages ou inconvenient a utiliser ce typre d'algo ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Code : Tout sélectionner

x = 300 + e * Cos(angle) ; ici on affiche x + rayon * cosinus de l'angle donc 360 
hum, on met quoi dans un Cos, des ... ? des radians donc de 0 à 2Pi et pas de 0 à 360

une autre horreur :

Code : Tout sélectionner

If StartDrawing(WindowOutput())
....
EndIf 
StopDrawing()
Très joli bug en perspective si le startdrawing ne marche pas :roll:

Sinon, on a le Rayon + 1 qui ne sert à rien car les rayons sont figés à 200.

Bon ben c'est tout :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre