Page 1 sur 1

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

Publié : dim. 31/mai/2009 21:22
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
   

Publié : dim. 31/mai/2009 21:52
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
   

Publié : dim. 31/mai/2009 21:56
par djes
Plutôt joli :)

Publié : dim. 31/mai/2009 22:18
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.

Publié : dim. 31/mai/2009 22:28
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
   

Publié : dim. 31/mai/2009 22:43
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
   

Publié : dim. 31/mai/2009 22:45
par Ollivier
Pardon! Bonsoir à vous deux mes amis. Nos posts se sont croisés, je n'avais pas vu celui de Beauregard!

Publié : dim. 31/mai/2009 23:02
par Backup
tres sympath ces codes :)

ça pourrai faire une screen saver :)

Publié : lun. 01/juin/2009 10:24
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

Publié : lun. 01/juin/2009 12:04
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 )

Publié : lun. 01/juin/2009 12:20
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!).