Koodi simuloi gravitaatiokenttään joutuneita pikku pikseleitä (raukkaparat). Itse asiassa tämä ei ole simulointia, vaan hyvin raaka versio siitä. Tästä olisi saanut realistisemman SIN- ja COS- funktioita käyttäen, mutta ne taas olisivat hidastaneet liikaa. Pidemmittä puheitta - katsokaa ja nauttikaa. Mitä kauemmin homma saa pyöriä, sitä vaikuttavammaksi meno menee. Pixelit keräytyvät keskukseen, hiljalleen jolloin uloimmat jäävät kiertämään vaikuttavilla radoilla 'emotähteä'.
DEFINT A-Z
'DROP - by Sqwiik
' Pudottaa pikseleitä.
' Kaunis efekti (hidastuu tosin, jos paljon tavaraa...)
' Pudottaa kerätyt pisteet kohti gravitaation keskustaa --
' pisteet jäävät kiertämään sitä.
' Kyseessä EI ole realistinen gravitaatio...
' Yllättävää kyllä tässäkin tapahtuu ellipsiratojen muodostumista
' täysin spontaanisti. Outoa.
' Toimivuus testattu 386:sella. Muille täytyykin jo vähän hidastaa...
'maksimi määrä pisteille
CONST max.pixeli = 3000
'Seuraavat ovat efekteihin
CONST YMGRAV = .2, XMGRAV = .2
'YM=vertikaalinen gravitaatio, XM poikittainen.
'Missä on gravitaation keskus?
CONST GRAVX = 160, GRAVY = 100
'varataan muisti
DIM pisteenvari(0 TO max.pixeli) AS INTEGER 'pisteiden väri
DIM pisteenxy(0 TO max.pixeli, 1 TO 2) AS SINGLE 'pisteiden sijainti
DIM pisteengrav(0 TO max.pixeli, 1 TO 2) AS SINGLE 'pisteiden gravitaatio (ym+xm)
SCREEN 13
'piirretään pisteitä jotka tippuvat 'aukkoon'
FOR a = 0 TO 1000
PSET (INT(RND * 320), INT(RND * 200)), INT(RND * 16) + 1
NEXT
'Annetaan aikaa katsella kaikkia pisteitä...
DO: LOOP UNTIL INKEY$ <> ""
'Haetaan data pisteisiin
c = 0
FOR x = 0 TO 319
FOR y = 0 TO 199
IF POINT(x, y) <> 0 THEN
pisteenvari(c) = POINT(x, y)
pisteenxy(c, 1) = x
pisteenxy(c, 2) = y
pisteengrav(c, 1) = -2 + RND * 4 'satunnainen alkuvauhti
pisteengrav(c, 2) = -1 + RND * 2
c = c + 1
IF c = max.pixeli THEN EXIT FOR
END IF
NEXT y
IF c = max.pixeli THEN EXIT FOR
NEXT x
'Nyt: c=liikutettavien pisteiden määrä.
'joten eiköhän aleta, TULTA!
DO
CIRCLE (GRAVX, GRAVY), 2, 2 'gravitaation keskipiste (selvyyden vuoksi)
FOR a = 0 TO c
'Piste piiloon...
PSET (pisteenxy(a, 1), pisteenxy(a, 2)), 0
'Liikutetaan
pisteenxy(a, 1) = pisteenxy(a, 1) + pisteengrav(a, 1)
pisteenxy(a, 2) = pisteenxy(a, 2) + pisteengrav(a, 2)
'ja sitten... lasketaan uusi gravitaatio!
'Tämä ON karkeaa...
IF pisteenxy(a, 1) < GRAVX THEN 'liikaa vasemmalla
pisteengrav(a, 1) = pisteengrav(a, 1) + XMGRAV
IF pisteenxy(a, 2) < GRAVY THEN
pisteengrav(a, 2) = pisteengrav(a, 2) + YMGRAV
ELSE
pisteengrav(a, 2) = pisteengrav(a, 2) - YMGRAV
END IF
ELSE
pisteengrav(a, 1) = pisteengrav(a, 1) - XMGRAV
IF pisteenxy(a, 2) < GRAVY THEN
pisteengrav(a, 2) = pisteengrav(a, 2) + YMGRAV
ELSE
pisteengrav(a, 2) = pisteengrav(a, 2) - YMGRAV
END IF
END IF
'Ja uudelleen näkyviin
PSET (pisteenxy(a, 1), pisteenxy(a, 2)), pisteenvari(a)
NEXT a
LOOP UNTIL INKEY$ <> ""Tämä ON karkea kuvaus gravitaatiosta. Jos pisteiden määrän vähentää alle 10:een ja hidastaa riittävästi, saa näkyviin kappaleiden rajat. Kommentti radoista: Newton kääntyy haudassaan niin että kopsahtaa kun mainitsen gravitaation tämän demon yhteydessä. Radat tuntuvat (OVAT!)todella kaoottisia. Selitys: kukin piste etenee kiihtyvällä liikkeellä kohti gravitaatiokeskustaa. Koska x- ja y-gravitaatiota voi määätä erikseen, eri arvoja kokeilemalla saa varsin hauskoja lopputuloksia. Esim: YMGRAV = 0.01 ja XM... = 0.5 => vertikaalista meininkiä...
Jos gravitaation perushomma askarruttaa, niin lukekaa perusfysiikkaa. Aion kirjoittaa oppaan tasohyppelyistä ja niihin liittyvistä ongelmista tässä piakkoin, kun on aikaa...
Tulee jännä efekti jos ottaa ton pisteen pyyhkimisen pois :D
Toimii aivan jeeviän nopeasti. Oliko tuossa missään hidastussysteemiä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.