Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Gravitaation simulointia

sqwiik [28.09.2003 21:46:54]

#

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$ <> ""

sqwiik [28.09.2003 21:51:23]

#

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

sooda [29.09.2003 16:48:52]

#

Tulee jännä efekti jos ottaa ton pisteen pyyhkimisen pois :D

hunajavohveli [29.09.2003 20:27:38]

#

Toimii aivan jeeviän nopeasti. Oliko tuossa missään hidastussysteemiä?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta