This simulation has 20 GGB snowflakes[br][br]Here is another one with 40 GGB snowflakes: [url=https://www.geogebra.org/m/xkn3cuyj]GeoGebra snowing[/url] [br][br]It runs better offline: [url=https://www.geogebra.org/material/show/id/xkn3cuyj]Download GeoGebra snowing[/url]
# Before we must add the picture centred at the origin[br]# I used this one: https://wiki.geogebra.org/uploads/1/11/GeoGebra.svg[br][br]# Then create a Setup button with the following script[br]Ln = 1...20[br][br]Execute( Zip( "posX"+i+" = Slider(-50, 50, 0.01, 1, 200, false, true, false, false)", i, Ln ) )[br]Execute( Zip( "SetVisibleInView( posX"+i+", 1, false )", i, Ln) ) [br]Execute( Zip( "SetValue( posX"+i+", RandomBetween(-50, 50) )", i, Ln) ) [br][br]Execute( Zip( "posY"+i+" = Slider(-100, 100, 0.01, 1, 200, false, true, false, false)", i, Ln ) )[br]Execute( Zip( "SetVisibleInView( posY"+i+", 1, false )", i, Ln) ) [br]Execute( Zip( "SetValue( posY"+i+", 50 )", i, Ln) ) [br][br]Execute( Zip( "initialAngle"+i+" = RandomUniform(0, 2 * pi)", i, Ln ) )[br]Execute( Zip( "size"+i+" = RandomUniform(0.3, 1.2)", i, Ln ) )[br][br]Execute( Zip( "radius"+i+" = RandomUniform(0, 10^2)", i, Ln ) )[br][br]# Angular velocity[br]Execute( Zip( "w"+i+" = RandomBetween(1, 3)", i, Ln ) )[br][br]# time[br]time = 0[br][br]Execute( Zip( "angle"+i+" = w"+i+" * time + initialAngle"+i+"", i, Ln ) )[br][br]run = Slider(0, 1, 0.01, 1, 200, false, true, false, false)[br][br]Execute( Zip( "T"+i+" = Translate( Rotate( Dilate( pic1, size"+i+"), 2*pi*sin(angle"+i+") ), Vector( (posX"+i+", posY"+i+") ) )", i, Ln) )
# In the slider named "run" add this script in the tab On Update[br]SetValue(time, time + 0.01)[br][br]#Execute( Zip("" , i, Ln) )[br][br]Execute( Zip(" SetValue(angle"+i+", w"+i+" * time + initialAngle"+i+") " , i, Ln) )[br]Execute( Zip(" SetValue(posX"+i+", 20 + radius"+i+" * sin(angle"+i+")) " , i, Ln) )[br]Execute( Zip(" SetValue(posY"+i+", posY"+i+" - (size"+i+")^(1/2)) " , i, Ln) )[br][br]Execute( Zip(" If( posY"+i+" < -20, SetValue(posY"+i+", RandomBetween(50, 60))) " , i, Ln) )[br]Execute( Zip(" If( posY"+i+" < -20, SetValue(posX"+i+", RandomBetween(-50, 50))) " , i, Ln) )