Drôles des cercles

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Drôles des cercles

Message par threedslider »

Un code sympa à vous partager :mrgreen:

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 17/10/2023
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(1, 0,0,800,600,"Funny cirlces", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)


Structure rond
  x.i
  y.i
  rayon.i
EndStructure


Myvar.rond

myvar\x = 10
myvar\y = 10
myvar\rayon = 5


Procedure Cercle(X, Y, *cl.rond)
  
  For n=0 To 1800
        cx = *cl\rayon * Cos(n)
        cy=  *cl\rayon * Sin(n)
        Plot(cx+*cl\x+ X,cy+*cl\y+Y,RGB(255,0,0)) 
      Next
EndProcedure   

Procedure sim(xx, yy, X1.i, Y1.i, iter)
  
  Myvar_other.rond
  
  myvar_other\x = 100
  myvar_other\y = 100
  myvar_other\rayon = 30
  
  For n=0 To 5
  
  d2 = Sqr((xx-myvar_other\x) * (xx-myvar_other\x) + (yy-myvar_other\y) * (yy-myvar_other\y))
  
  r2 = Sqr(myvar_other\rayon * myvar_other\rayon)
  
  in_d2 = Sqr((xx-x1)*(xx-x1) + (yy-y1)*(yy-y1))
   
    If d2*20 > r2 And in_d2*10 > r2
        myvar_other\rayon=Myvar_other\rayon-100/in_d2
        myvar_other\x = X1
        myvar_other\y = Y1
        Cercle(0,0,@myvar_other)      
       
       
     ; EndIf
      
;      Else
;        ;If d2 > r2
;         myvar_other\rayon =  30-n+2*2
;           ;myvar_other\x = xx
;          ;myvar_other\y =  yy
;          Cercle(0,0,@myvar_other)
;        ;EndIf
;        
        
   
   EndIf
 Next
 
 If iter > 0 ;And d2 > r2
     
     sim(xx, yy, X1+120, Y1, iter-1) 
  
 EndIf
    
EndProcedure
  

 ; Déplacement de la souris
  MouseLocate(0,0)  

Repeat
  ExamineKeyboard()
  Repeat 
    event = WindowEvent()
  Until event = 0

  ClearScreen(RGB(255,200,0))  
  
   
  ExamineMouse() ; Etat de la souris
  xm = MouseX()   ; Position en x de la souris                     
  ym = MouseY()   ; Position en y de la souris
  
  ;Debug x
  ;Debug y
  

  
 
  
  StartDrawing(ScreenOutput())
 
  For x = 0 To 4
   
    
    move.f  +  1/10000
    
      wave_x.f = Cos(x)  * 200
      
      wave_y.f =  Sin(x) * 200
      
      ;myvar\x = x+10
      ;myvar\y = y+10
      
       If xm < 3
        xm = 3
      Else
        If xm >750
          xm = 750
        EndIf
      EndIf
      
      If ym < 3
        ym = 3
      Else
        If ym > 550
          ym = 550
        EndIf
      EndIf
      
        
    cercle(xm,ym,@myvar)  
      
     sim(xm,ym, 100, 100+x*100, 5)

  Next
    
  StopDrawing()
  
    If  KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
  
 FlipBuffers()
  
  
  
ForEver
End
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Drôles des cercles

Message par threedslider »

Suite Yay! Cette fois ci des spirales repris comme au post auparavant ^^

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 17/10/2023
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(1, 0,0,800,600,"Funny cirlces 2", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)


Structure rond
  x.i
  y.i
  rayon.i
EndStructure


Myvar.rond

myvar\x = 10
myvar\y = 10
myvar\rayon = 5


Procedure little_Cercle(X, Y, *cl.rond)
  
  For n=0 To 1800
        cx = *cl\rayon * Cos(n)
        cy=  *cl\rayon * Sin(n)
        Plot(cx+*cl\x+ X,cy+*cl\y+Y,RGB(255,0,0)) 
      Next
EndProcedure   
    
    
    
move.f = 0


Procedure Cercle(X, Y, *cl.rond)
  
  Shared move.f
  
  ;move.f  +  1/10000
  
  For n=0 To 360
        cx = *cl\rayon * Exp((move-n)/200)  * Cos(move+n)
        cy=  *cl\rayon * Exp((move-n)/200)  * Sin(move+n)
        Plot(cx+*cl\x+ X,cy+*cl\y+Y,RGB(255,0,0)) 
      Next
EndProcedure   

Procedure sim(xx, yy, X1.i, Y1.i, iter)
  
  Myvar_other.rond
  
  myvar_other\x = 100
  myvar_other\y = 100
  myvar_other\rayon = 80
  
  For n=0 To 5
  
  d2 = Sqr((xx-myvar_other\x) * (xx-myvar_other\x) + (yy-myvar_other\y) * (yy-myvar_other\y))
  
  r2 = Sqr(myvar_other\rayon * myvar_other\rayon)
  
  in_d2 = Sqr((xx-x1)*(xx-x1) + (yy-y1)*(yy-y1))
   
    If d2*20 > r2 And in_d2*10 > r2
        myvar_other\rayon=Myvar_other\rayon-100/in_d2
        myvar_other\x = X1
        myvar_other\y = Y1
        Cercle(0,0,@myvar_other)      
       
       
     ; EndIf
      
;      Else
;        ;If d2 > r2
;         myvar_other\rayon =  30-n+2*2
;           ;myvar_other\x = xx
;          ;myvar_other\y =  yy
;          Cercle(0,0,@myvar_other)
;        ;EndIf
;        
        
   
   EndIf
 Next
 
 If iter > 0 ;And d2 > r2
     
     sim(xx, yy, X1+120, Y1, iter-1) 
  
 EndIf
    
EndProcedure
  

 ; Déplacement de la souris
  MouseLocate(0,0)  

Repeat
  ExamineKeyboard()
  Repeat 
    event = WindowEvent()
  Until event = 0

  ClearScreen(RGB(255,200,0))  
  
   
  ExamineMouse() ; Etat de la souris
  xm = MouseX()   ; Position en x de la souris                     
  ym = MouseY()   ; Position en y de la souris
  
  ;Debug x
  ;Debug y
  

  move.f  +  1/1000
 
  
  StartDrawing(ScreenOutput())
 
  For x = 0 To 4
   
    
    move.f  +  1/10000
    
      wave_x.f = Cos(x)  * 200
      
      wave_y.f =  Sin(x) * 200
      
      ;myvar\x = x+10
      ;myvar\y = y+10
      
       If xm < 3
        xm = 3
      Else
        If xm >750
          xm = 750
        EndIf
      EndIf
      
      If ym < 3
        ym = 3
      Else
        If ym > 550
          ym = 550
        EndIf
      EndIf
      
        
    little_cercle(xm,ym,@myvar)  
    
    
    
     sim(xm,ym, 100, 100+x*100, 5)

  Next
    
  StopDrawing()
  
    If  KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
  
 FlipBuffers()
  
  
  
ForEver
End
Amusez vous bien ! :arrow: :mrgreen:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Drôles des cercles

Message par Kwai chang caine »

Sympa comme effet :wink:
Et ça pourrait même être utile pour une sélection de choix :idea:
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Drôles des cercles

Message par SPH »

Tu es bien bon KCC ! :)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Drôles des cercles

Message par threedslider »

Merci à vous deux ! :wink:
Répondre