Miten piirrän viisisakaraisen tähden.
eli tarvitsen tietää asteet miten käännytää
Neliön tein näin
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
Mutta tähteä en saa kirveelläkään
eli tarvitsen tietää asteet miten käännytää
Neliön tein näin
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
CALL rt(90)
CALL fd(100)
Mutta tähteä en saa kirveelläkään
Vastaukset 2
Vanhimmat
Homma menee about näin:
Jokainen sakara on tasakylkinen kolmio. Kun jaetaan 360 astetta (ympyrä) sakaroiden lkm:llä (sakarat), saadaan tulos, montako astetta pitää kääntyä, jotta päästään takaisin lähtöpisteeseen haluttujen askeleiden jälkeen, ts. piirretään monikulmio (tässä 5-kulmio).
Merkitään kolmion eli sakaran korkeutta h:lla ja leveyttä l:llä. Sakara muodostuu siis kolmion kyljistä l. hypotenuusasta (c^2=a^2 b^2). Hypotenuusan ja pohjasivun välinen kulma saadaan modifioimalla kaavasta tan alfa=a/b (alfa-kulman tangentti on kulman vastakkaisen sivun suhde kulman viereiseen sivuun). Varsinainen astekulma saadaan, kun tangentti kerrotaan 180:lla ja jaetaan piillä (kone käyttää radiaaneja eli tehdään muutos rad->deg).
DECLARE SUB piirra (pituus!) 'piirtää viivan
DECLARE SUB kaanna (astetta!) 'kääntää suuntaa asteina (suunnan muutos)
DECLARE SUB suunta (asteet!) 'asettaa suunnan (uusi, absoluuttinen suunta)
SCREEN 12
DIM SHARED astenyt 'pidetään kirjaa nykyisestä suunnasta
pii = ATN(1) * 4 'pii ;)
sakarat = 5 'montako sakaraa tähteen
askel = 360 / sakarat 'montako astetta sakaran pohjasivu kääntyy ympyrän kehällä joka kerta
h = 50 ' sakaran korkeus pisteinä
l = 20 ' sakaran kannan leveys pisteinä
hyp = SQR(h ^ 2 (l / 2) ^ 2) 'sakaran sivun pituus (hypotenuusat, ts. tasakylk. kolmion sivut)
aste = (l / (2 * hyp)) 'kulman tangentti
aste = TAN(aste) * 180 / pii 'kulma asteina
FOR i = 1 TO sakarat 'piirretään sakarat
kaanna (aste) 'eka käännös
piirra (h) 'eka viiva
kaanna (180 - aste * 2) 'toinen käännös
piirra (h) 'toinen viiva
suunta (i * askel) 'käännetään suunta seuraavalle sakaralle
NEXT
SUB kaanna (astetta)
astenyt = (astenyt astetta) MOD 360
DRAW "ta" STR$(INT(astenyt))
END SUB
SUB piirra (pituus)
DRAW "u" STR$(pituus)
END SUB
SUB suunta (asteet)
astenyt = asteet MOD 360
DRAW "ta" STR$(INT(astenyt))
END SUB
Homma menee about näin:
Jokainen sakara on tasakylkinen kolmio. Kun jaetaan 360 astetta (ympyrä) sakaroiden lkm:llä (sakarat), saadaan tulos, montako astetta pitää kääntyä, jotta päästään takaisin lähtöpisteeseen haluttujen askeleiden jälkeen, ts. piirretään monikulmio (tässä 5-kulmio).
Merkitään kolmion eli sakaran korkeutta h:lla ja leveyttä l:llä. Sakara muodostuu siis kolmion kyljistä l. hypotenuusasta (c^2=a^2 b^2). Hypotenuusan ja pohjasivun välinen kulma saadaan modifioimalla kaavasta tan alfa=a/b (alfa-kulman tangentti on kulman vastakkaisen sivun suhde kulman viereiseen sivuun). Varsinainen astekulma saadaan, kun tangentti kerrotaan 180:lla ja jaetaan piillä (kone käyttää radiaaneja eli tehdään muutos rad->deg).
DECLARE SUB piirra (pituus!) 'piirtää viivan
DECLARE SUB kaanna (astetta!) 'kääntää suuntaa asteina (suunnan muutos)
DECLARE SUB suunta (asteet!) 'asettaa suunnan (uusi, absoluuttinen suunta)
SCREEN 12
DIM SHARED astenyt 'pidetään kirjaa nykyisestä suunnasta
pii = ATN(1) * 4 'pii ;)
sakarat = 5 'montako sakaraa tähteen
askel = 360 / sakarat 'montako astetta sakaran pohjasivu kääntyy ympyrän kehällä joka kerta
h = 50 ' sakaran korkeus pisteinä
l = 20 ' sakaran kannan leveys pisteinä
hyp = SQR(h ^ 2 (l / 2) ^ 2) 'sakaran sivun pituus (hypotenuusat, ts. tasakylk. kolmion sivut)
aste = (l / (2 * hyp)) 'kulman tangentti
aste = TAN(aste) * 180 / pii 'kulma asteina
FOR i = 1 TO sakarat 'piirretään sakarat
kaanna (aste) 'eka käännös
piirra (h) 'eka viiva
kaanna (180 - aste * 2) 'toinen käännös
piirra (h) 'toinen viiva
suunta (i * askel) 'käännetään suunta seuraavalle sakaralle
NEXT
SUB kaanna (astetta)
astenyt = (astenyt astetta) MOD 360
DRAW "ta" STR$(INT(astenyt))
END SUB
SUB piirra (pituus)
DRAW "u" STR$(pituus)
END SUB
SUB suunta (asteet)
astenyt = asteet MOD 360
DRAW "ta" STR$(INT(astenyt))
END SUB