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!).