Miten QBasicilla sais silleen että piste lähtee vaikkapa pisteestä 100,100 vaikkapa pisteeseen 26,83? ettei se menis ihan vaaka-/pystysuoraan taikka 45 asteen kulmassa? Semmonen aliohjelma/funktio olis kiva että:
liikutapiste (alkuX, alkuY, loppuX, loppuY)
edit: älkää sitten valittako jos tossa esimerkissä on väärin kirjotettu noi muuttujan nimet, esim jos siinä pitää olla jotkut alkuX! -tyyppiset huutomerkkijutut, kun en tajua noista pätkääkään noista tommosista! :)
PS: miks pitää noi kooditagit pistää omille riveilleen? :P
PPS: jotain aliohjelmaoppaita netissä?
//Laitat tässä sen liikkumaan 26 pisteeseen vaaka tasossa ja sitten kun se on siinä teet näin. If piste = 26,83 then pRINT "SE OSUI SIIHEN JEE!" end if
No tarvitsee interpoloida (luulisin), eli käyttää samaa metodia millä piirretään muunmuassa viivoja. Täytyypä tutkiskella legendaarista lamertuttia.
Seuraava on muunnettu suoraan lamertutin esimerkkikoodista kappaleesta 7.5.
SUB liikutapiste (ax, ay, bx, by) deltax = bx - ax deltay = by - ay IF ABS(deltax) >= ABS(deltay) THEN IF deltax < 0 THEN SWAP ax, bx SWAP ay, by END IF Y = ay IF deltay = 0 THEN ykorotus = 0 ELSE ykorotus = deltay / deltax END IF FOR x = ax TO bx ' eka PSET on ylimääräinen. Lisätty ' jotta piste liikkuisi eikä piiräisi ' viivaa PSET (x - 1, Y - ykorotus), 0 PSET (x, Y), 15 Y = Y + ykorotus NEXT x ELSE IF deltay < 0 THEN SWAP ax, bx SWAP ay, by END IF x = ax IF deltax = 0 THEN xkorotus = 0 ELSE xkorotus = deltax / deltay END IF FOR Y = ay TO by PSET (x - xkorotus, Y - 1), 0 PSET (x, Y), 15 x = x + xkorotus NEXT Y END IF END SUB
(Tuota käytetään siis silleen, että SCREEN 13 ja sitten CALL liikutapiste (alkuX, alkuY, loppuX, loppY) jne. Siihen voisi laittaa vielä jotain hidastetta. Uskoisin myös, että sitä pystyy optimoimaan aikas lailla reippaasti. Nyt en jaksa... saasta on hyvä ja pohtii itse *virn*)
Itse olen tehnyt aina näin (voi olla samoja ideoita kuin tuossa ylläolevassa koodissa):
DIM x1 AS INTEGER, x2 AS INTEGER, y1 AS INTEGER, y2 AS INTEGER DIM askeleet AS INTEGER, xaskel AS SINGLE, yaskel AS SINGLE DIM xkohta AS SINGLE, ykohta AS SINGLE, i AS INTEGER, a AS SINGLE SCREEN 13 'aloituskohta x1 = 78 y1 = 32 'lopetuskohta x2 = 267 y2 = 166 'merkitään aloitus- ja lopetuskohta ympyrällä CIRCLE (x1, y1), 10, 1 CIRCLE (x2, y2), 10, 2 'animaation askelten määrä askeleet = 50 'x:n ja y:n siirtymä askelta kohden xaskel = (x2 - x1) / askeleet yaskel = (y2 - y1) / askeleet 'aloituskohta xkohta = x1 ykohta = y1 'käydään läpi jokainen animaation askel FOR i = 1 TO askeleet 'poistetaan vanha piste CIRCLE (xkohta, ykohta), 1, 0 'lasketaan uusi x ja y xkohta = xkohta + xaskel ykohta = ykohta + yaskel 'piirretään piste CIRCLE (xkohta, ykohta), 1, 15 'hidastus a = TIMER DO WHILE a + .01 > TIMER LOOP NEXT
Aihe on jo aika vanha, joten et voi enää vastata siihen.