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