Tiedän että tälläinen ei ole mitään vaikeaa, mutta jos ei osaa kunnolla matematiikkaa, ei sitten näitäkään. Niin, jooh, asiaan. Eli toisin sanoen miten toteutetaan viiva joka pyörii keskiakselinsa ympäri täyskierroksen? Sellainen viiva, jonka piirrossa käytetään LINE-käskyä. Entä sitten nämä täyttöhommat? Tiedän kyllä PAINT - käskyn, mutta sillä tuntuu olevan paha tapa toisella kertaa täyttää koko ruutu sillä värillä.
Ja, noh.. koska mielikuvitukseni ei riitä, niin kaikki piirtojutut, varsinkin ne joissa on matemaattisia kaavoja käytössä (SIN, COS, TAN) ovat toivottuja. Ajattelin meinaan harjoitella vähän monimutkaisempia piirtojuttuja, jotenka minulle riittää vain pienen pieni palanen, kuten yksinäinen viiva, tai vastaavaa.
-Grey-
Käviskö tälläinen :)
SCREEN 13 pii = 4 * ATN(1) DO FOR i = 0 TO 2 * pii STEP .05 x = 160 + SIN(i) * 60 - 15 y = 100 + COS(i) * 60 - 15 LINE (x, y)-(160, 100), 2 CLS 2 NEXT LOOP UNTIL INKEY$ <> ""
Tuossa pyörii ainakin joku välkkyvä viiva.
SCREEN 13 rad = ATN(1) * 4 / 180 DO kulma = kulma + 1 IF kulma = 360 THEN kulma = 0 LINE (160 + SIN(kulma * rad) * 50, 100 - COS(kulma * rad) * 50)-(160 - SIN(kulma * rad) * 50, 100 + COS(kulma * rad) * 50), 15 FOR a = 1 TO 20000 NEXT a LINE (160 + SIN(kulma * rad) * 50, 100 - COS(kulma * rad) * 50)-(160 - SIN(kulma * rad) * 50, 100 + COS(kulma * rad) * 50), 0 LOOP UNTIL INKEY$ <> ""
Toinen esimerkki. Trigonometrisillä funktioilla tuon voi tosiaan tehdä.
lainaus:
Eli toisin sanoen miten toteutetaan viiva joka pyörii keskiakselinsa ympäri täyskierroksen?
Tarvitaan vähän trigonometriaa. Ensin on tiedossa kulma radiaaneina, eli sen täytyy olla välillä 0 - 2 * pii. Kulmaa voi muuttaa hyvin FOR- tai DO-silmukalla. Tästä kulmasta lasketaan sinifunktiolla siirtymä x-akselilla ja kosinifunktiolla siirtymä y-akselilla. Siirtymä kerrotaan viivan pituudella, ja näin saadaan viivan ensimmäinen piste. Toinen piste saadaan kun edelliset arvot kerrotaan viivan pituuden vastaluvulla.
Tässä on vielä kolmas esimerkkiohjelma:
CONST PII = 3.14159 'piin likiarvo
CONST KESKIX = 160 'keskiakselin x
CONST KESKIY = 100 'keskiakselin y
CONST PITUUS = 50 'viivan puolikkaan pituus
DIM k AS SINGLE
DIM x1 AS INTEGER, y1 AS INTEGER
DIM x2 AS INTEGER, y2 AS INTEGER
SCREEN 13
'näytetään 1000-vaiheinen animaatio
FOR k = 0 TO 2 * PII STEP 2 * PII / 1000
'pyyhitään viiva viime kierroksen
'koordinaattien perusteella
LINE (x1, y1)-(x2, y2), 0
'lasketaan viivan koordinaatit
x1 = KESKIX + SIN(k) * PITUUS
y1 = KESKIY + COS(k) * PITUUS
x2 = KESKIX + SIN(k) * -PITUUS
y2 = KESKIY + COS(k) * -PITUUS
'piirretään viiva
LINE (x1, y1)-(x2, y2), 15
'hidaste
WAIT &H3DA, 8
NEXTKatso myös tämä koodivinkki:
https://www.ohjelmointiputka.net/koodivinkit/
lainaus:
Entä sitten nämä täyttöhommat? Tiedän kyllä PAINT - käskyn, mutta sillä tuntuu olevan paha tapa toisella kertaa täyttää koko ruutu sillä värillä.
PAINT-käsky toimii kyllä ihan hyvin, jos sitä käyttää oikein. Kerro toki tarkemmin ongelmastasi.
Tuolla sais kanssa DRAW käskyllä.
CLS
SCREEN 10
FOR n = 1 TO 36
DRAW "c15 bm200,200" + "ta" + STR$(n * 10) + "r100"
NEXT n
END
Aihe on jo aika vanha, joten et voi enää vastata siihen.