Je vous laisse maître de trouver une signification...

Sujets variés concernant le développement en PureBasic
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Je vous laisse maître de trouver une signification...

Message par Ollivier »

...A cette erreur...

Code : Tout sélectionner

   #Source = 1
   #Base = 2
   #NewBase = 3

   Structure SYS
      Type.I
      X.F
      Y.F
      Angle.F
      AngleV.F
      Vitesse.F
      Period.I
      Delay.I
   EndStructure

   Define X.F
   Define Y.F
   Define Angle.F
   Define Vitesse.F
   Define CentralAngle.I
   Global NewList Sys.SYS()
   AddElement(Sys() )
   ObjSize = 4
   InitSprite()
   InitMouse()
   ExamineDesktops()
   ScrWidth = DesktopWidth(0)
   ScrHeight = DesktopHeight(0)
   ScrDepth = DesktopDepth(0)
   Sys()\Type = #Source
   Sys()\X = ScrWidth / 2.0
   Sys()\Y = ScrHeight / 2.0
   Sys()\Period = 1
   Sys()\Delay = ElapsedMilliseconds() + Sys()\Period
   OpenScreen(ScrWidth, ScrHeight, ScrDepth, "")
   ScrBack = CreateSprite(-1, ScrWidth, ScrHeight)
   ScrObj  = CreateSprite(-1, ObjSize, ObjSize)
   StartDrawing(SpriteOutput(ScrObj) )
      Box(0, 0, ObjSize, ObjSize, RGB(255, 255, 255) )
   StopDrawing()
   Repeat
      Laps = ElapsedMilliseconds()
      Delay(1)
      ExamineMouse()
      DisplaySprite(ScrBack, 0, 0)
      For I = 0 To ListSize(Sys() ) - 1
         SelectElement(Sys(), I)
         X = Sys()\X
         Y = Sys()\Y
         Type = Sys()\Type
         Delay = Sys()\Delay
         Select Type
            Case #Source
               If Laps => Delay
                  If ListSize(Sys() ) < 600
                     For CentralAngle = 0 To 0
                        Sys()\Delay = Laps + Sys()\Period + Random(Sys()\Period)
                     
                        AddElement(Sys() )
                        Sys()\X = X
                        Sys()\Y = Y
                        Sys()\Angle = CentralAngle * (#PI / 3.0)
                        Sys()\Angle = Random(628) / 100.0
                        Sys()\Vitesse = 0.2 * 20.0
                        Sys()\Type = #NewBase
                     Next CentralAngle
                  EndIf
               EndIf
               ;DisplaySprite(ScrObj, X, Y)
            Case #Base
               DisplaySprite(ScrObj, X, Y)
               Angle = Sys()\Angle
               Vitesse = Sys()\Vitesse
               Sys()\X + (Cos(Angle) * Vitesse)
               Sys()\Y - (Sin(Angle) * Vitesse)
               Sys()\AngleV + 0.005
               Sys()\Angle + Sin(Sys()\AngleV) * 16.0
            Case #NewBase
               Sys()\Type = #Base
         EndSelect
      Next
      FlipBuffers()
   Until MouseButton(2)
   
   Repeat
      Delay(1)
      ExamineMouse()
      FlipBuffers()
   Until MouseButton(2) = 0
   CloseScreen()
   End
   
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et une autre ...

Code : Tout sélectionner

   #Source = 1
   #Base = 2
   #NewBase = 3

   Structure SYS
      Type.I
      X.F
      Y.F
      Angle.F
      AngleV.F
      Vitesse.F
      Period.I
      Delay.I
   EndStructure

   Define X.F
   Define Y.F
   Define Angle.F
   Define Vitesse.F
   Define CentralAngle.I
   Global NewList Sys.SYS()
   AddElement(Sys() )
   ObjSize = 4
   InitSprite()
   InitMouse()
   ExamineDesktops()
   ScrWidth = DesktopWidth(0)
   ScrHeight = DesktopHeight(0)
   ScrDepth = DesktopDepth(0)
   Sys()\Type = #Source
   Sys()\X = ScrWidth / 2.0
   Sys()\Y = ScrHeight / 2.0
   Sys()\Period = 16
   Sys()\Delay = ElapsedMilliseconds() + Sys()\Period
   OpenScreen(ScrWidth, ScrHeight, ScrDepth, "")
   ScrBack = CreateSprite(-1, ScrWidth, ScrHeight)
   ScrObj  = CreateSprite(-1, ObjSize, ObjSize)
   StartDrawing(SpriteOutput(ScrObj) )
      Box(0, 0, ObjSize, ObjSize, RGB(255, 255, 255) )
   StopDrawing()
   Repeat
      Laps = ElapsedMilliseconds()
      Delay(1)
      ExamineMouse()
      DisplaySprite(ScrBack, 0, 0)
      For I = 0 To ListSize(Sys() ) - 1
         SelectElement(Sys(), I)
         X = Sys()\X
         Y = Sys()\Y
         Type = Sys()\Type
         Delay = Sys()\Delay
         Select Type
            Case #Source
               If Laps => Delay
                  If ListSize(Sys() ) < 600
                     For CentralAngle = 0 To 0
                        Sys()\Delay = Laps + Sys()\Period + Random(Sys()\Period)
                     
                        AddElement(Sys() )
                        Sys()\X = X
                        Sys()\Y = Y
                        Sys()\Angle = CentralAngle * (#PI / 3.0)
                        Sys()\Angle = Random(628) / 100.0
                        Sys()\Angle = Random(2) * 2
                        Sys()\Vitesse = 0.3 * 20.0
                        Sys()\Type = #NewBase
                     Next CentralAngle
                  EndIf
               EndIf
               ;DisplaySprite(ScrObj, X, Y)
            Case #Base
               DisplaySprite(ScrObj, X, Y)
               Angle = Sys()\Angle
               Vitesse = Sys()\Vitesse
               Sys()\X + (Cos(Angle) * Vitesse)
               Sys()\Y - (Sin(Angle) * Vitesse)
               Sys()\AngleV + 0.01
               Sys()\Angle + Sin(Sys()\AngleV) * 8.0
            Case #NewBase
               Sys()\Type = #Base
         EndSelect
      Next
      FlipBuffers()
   Until MouseButton(2)
   
   Repeat
      Delay(1)
      ExamineMouse()
      FlipBuffers()
   Until MouseButton(2) = 0
   CloseScreen()
   End
   
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Plutôt joli :)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

djes a écrit :Plutôt joli :)
oui c'est beau, quand à la signification, ben cela rappelle la vie, occupant peu à peu l'espace disponible... sauf que là, cela semble s'auto-réguler tout seul.
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Merci! Et bonsoir à toi!

Allez hop... Une autre...

Code : Tout sélectionner

   #Source = 1
   #Base = 2
   #NewBase = 3

   Structure SYS
      Type.I
      X.F
      Y.F
      Angle.F
      AngleV.F
      Vitesse.F
      Period.I
      Delay.I
   EndStructure

   Define X.F
   Define Y.F
   Define Angle.F
   Define Vitesse.F
   Define CentralAngle.I
   Global NewList Sys.SYS()
   AddElement(Sys() )
   ObjSize = 4
   InitSprite()
   InitMouse()
   ExamineDesktops()
   ScrWidth = DesktopWidth(0)
   ScrHeight = DesktopHeight(0)
   ScrDepth = DesktopDepth(0)
   Sys()\Type = #Source
   Sys()\X = ScrWidth / 2.0
   Sys()\Y = ScrHeight / 2.0
   Sys()\Period = 16
   Sys()\Delay = ElapsedMilliseconds() + Sys()\Period
   OpenScreen(ScrWidth, ScrHeight, ScrDepth, "")
   ScrBack = CreateSprite(-1, ScrWidth, ScrHeight)
   ScrObj  = CreateSprite(-1, ObjSize, ObjSize)
   StartDrawing(SpriteOutput(ScrObj) )
      Box(0, 0, ObjSize, ObjSize, RGB(255, 255, 255) )
   StopDrawing()
   Repeat
      Laps = ElapsedMilliseconds()
      Delay(1)
      ExamineMouse()
      DisplaySprite(ScrBack, 0, 0)
      For I = 0 To ListSize(Sys() ) - 1
         SelectElement(Sys(), I)
         X = Sys()\X
         Y = Sys()\Y
         Type = Sys()\Type
         Delay = Sys()\Delay
         Select Type
            Case #Source
               If Laps => Delay
                  If ListSize(Sys() ) < 600
                     For CentralAngle = 0 To 600
                        Sys()\Delay = Laps + Sys()\Period + Random(Sys()\Period)
                     
                        AddElement(Sys() )
                        Sys()\X = X
                        Sys()\Y = Y
                        Sys()\Angle = CentralAngle * (#PI / 3.0)
                        Sys()\Angle = Random(628) / 100.0
                        Sys()\Vitesse = Random(800) / 100.0
                        Sys()\Type = #NewBase
                     Next CentralAngle
                  EndIf
               EndIf
               ;DisplaySprite(ScrObj, X, Y)
            Case #Base
               DisplaySprite(ScrObj, X, Y)
               Angle = Sys()\Angle

               DestX.F = (4999.0 * Sys()\X + ScrWidth / 2.0) / 5000.0
               DestY.F = (4999.0 * Sys()\Y + ScrHeight / 2.0) / 5000.0
               
               Sys()\X = DestX
               Sys()\Y = DestY
               V.F = Sqr(DestX * DestX + DestY * DestY)


               Vitesse = Sys()\Vitesse * (100.0 / V)


               Sys()\X + (Cos(Angle) * Vitesse)
               Sys()\Y - (Sin(Angle) * Vitesse)
               Sys()\AngleV + 0.0001
               Sys()\Angle + Sin(Sys()\AngleV) * (10.0 / V)
               
               
            Case #NewBase
               Sys()\Type = #Base
         EndSelect
      Next
      FlipBuffers()
   Until MouseButton(2)
   
   Repeat
      Delay(1)
      ExamineMouse()
      FlipBuffers()
   Until MouseButton(2) = 0
   CloseScreen()
   End
   
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Même algo avec ptites étoiles...

Code : Tout sélectionner

   #Source = 1
   #Base = 2
   #NewBase = 3

   Structure SYS
      Type.I
      X.F
      Y.F
      Angle.F
      AngleV.F
      Vitesse.F
      Period.I
      Delay.I
   EndStructure

   Define X.F
   Define Y.F
   Define Angle.F
   Define Vitesse.F
   Define CentralAngle.I
   Global NewList Sys.SYS()
   AddElement(Sys() )
   ObjSize = 31
   InitSprite()
   InitMouse()
   ExamineDesktops()
   ScrWidth = DesktopWidth(0)
   ScrHeight = DesktopHeight(0)
   ScrDepth = DesktopDepth(0)
   Sys()\Type = #Source
   Sys()\X = ScrWidth / 2.0
   Sys()\Y = ScrHeight / 2.0
   Sys()\Period = 16
   Sys()\Delay = ElapsedMilliseconds() + Sys()\Period
   OpenScreen(ScrWidth, ScrHeight, ScrDepth, "")
   ScrBack = CreateSprite(-1, ScrWidth, ScrHeight)
;   ScrObj  = CreateSprite(-1, ObjSize, ObjSize)
;   StartDrawing(SpriteOutput(ScrObj) )
;      Box(0, 0, ObjSize, ObjSize, RGB(255, 255, 255) )
;   StopDrawing()
   ScrObj  = CreateSprite(-1, ObjSize, ObjSize)
   StartDrawing(SpriteOutput(ScrObj) )
   CX = (ObjSize - 1) / 2
   Box(CX, CX, 1, 1, RGB(255, 255, 255) )
   For J = 0 To (ObjSize - 1) / 2
      For I = 0 To 7
         C = 255.0 - (J * (255.0 / ((ObjSize - 1) / 2.0) ) )
         CX = (ObjSize - 1) / 2 + Cos(I * (#PI / 4.0) ) * J
         CY = (ObjSize - 1) / 2 + Sin(I * (#PI / 4.0) ) * J
         Box(CX, CY, 1, 1, RGB(C, C, C) )
      Next I
   Next J
   StopDrawing()
   Repeat
      Laps = ElapsedMilliseconds()
      Delay(1)
      ExamineMouse()
      DisplaySprite(ScrBack, 0, 0)
      For I = 0 To ListSize(Sys() ) - 1
         SelectElement(Sys(), I)
         X = Sys()\X
         Y = Sys()\Y
         Type = Sys()\Type
         Delay = Sys()\Delay
         Select Type
            Case #Source
               If Laps => Delay
                  If ListSize(Sys() ) < 600
                     For CentralAngle = 0 To 600
                        Sys()\Delay = Laps + Sys()\Period + Random(Sys()\Period)
                     
                        AddElement(Sys() )
                        Sys()\X = X
                        Sys()\Y = Y
                        Sys()\Angle = CentralAngle * (#PI / 3.0)
                        Sys()\Angle = Random(628) / 100.0
                        Sys()\Vitesse = Random(800) / 100.0
                        Sys()\Type = #NewBase
                     Next CentralAngle
                  EndIf
               EndIf
               ;DisplaySprite(ScrObj, X, Y)
            Case #Base
               DisplayTransparentSprite(ScrObj, X, Y)
               Angle = Sys()\Angle

               DestX.F = (4999.0 * Sys()\X + ScrWidth / 2.0) / 5000.0
               DestY.F = (4999.0 * Sys()\Y + ScrHeight / 2.0) / 5000.0
               
               Sys()\X = DestX
               Sys()\Y = DestY
               V.F = Sqr(DestX * DestX + DestY * DestY)


               Vitesse = Sys()\Vitesse * (100.0 / V)


               Sys()\X + (Cos(Angle) * Vitesse)
               Sys()\Y - (Sin(Angle) * Vitesse)
               Sys()\AngleV + 0.0001
               Sys()\Angle + Sin(Sys()\AngleV) * (10.0 / V)
               
               
            Case #NewBase
               Sys()\Type = #Base
         EndSelect
      Next
      FlipBuffers()
   Until MouseButton(2)
   
   Repeat
      Delay(1)
      ExamineMouse()
      FlipBuffers()
   Until MouseButton(2) = 0
   CloseScreen()
   End
   
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Pardon! Bonsoir à vous deux mes amis. Nos posts se sont croisés, je n'avais pas vu celui de Beauregard!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tres sympath ces codes :)

ça pourrai faire une screen saver :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Ouais! Sinon pour la petite explication, c'est donc pour ces trois (ou quatre) codes le même noyau. Chaque élément a une position incrémentée ainsi:

Code : Tout sélectionner

X + Sin(Angle)
Y + Cos(Angle)
Angle + Sin(AngleV)
AngleV + Constante
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ollivier a écrit :Ouais! Sinon pour la petite explication, c'est donc pour ces trois (ou quatre) codes le même noyau. Chaque élément a une position incrémentée ainsi:

Code : Tout sélectionner

X + Sin(Angle)
Y + Cos(Angle)
Angle + Sin(AngleV)
AngleV + Constante
tu veux savoir quoi ? je suis pas expert en math
mais c'est quasi sur que tu obtient une spirale

et bien sur un chiffre qui deviens négatif, continu sa spirale a l'envers !!

si tu avait PurGolo, j'aurai pu te démontrer par un petit prg (en Golo) tout con
qu'une spirale qui retrecie, lorsque ses données deviennent negative
elle regrossi ...

en fait tu veux une explication, mais tu dit pas sur quoi , on est pas dans ta tete , j'ai souvent remarqué que tu part dans des trucs, ou personnellement
j'ai beaucoup de mal a te suivre :)

il n'empeche que ces codes sont interressant , j'aime bien les trucs ou l'on ne maitrise pas ce que ça deviens )
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ca ne devrait pas faire une spirale mais une sorte de rosace, avec les branches qui font des sinusoïdales :)
Le code est très propre, et peut s'adapter à des tas de configurations.
Pour le champ d'étoiles par contre, tu n'as pas du tout besoin de trigo (à moins que tu ne veuilles le faire tourner). Une simple formule de perspective suffit (une division, quoi!).
Répondre