Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pyörivä viiva ja muut tälläiset (QB)

Grey [16.02.2004 20:20:43]

#

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-

rndprogy [16.02.2004 20:41:10]

#

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.

hunajavohveli [16.02.2004 21:10:20]

#

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

Antti Laaksonen [17.02.2004 00:14:26]

#

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/23755-qb-ympyrä-trigonometrialla

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.

Milu [17.02.2004 01:04:43]

#

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

Vastaus

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

Tietoa sivustosta