Page 1 sur 1

Algo cercle vs Circle()

Publié : lun. 04/oct./2004 23:08
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 ?

Publié : mar. 05/oct./2004 10:38
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: