Page 1 of 1

Kaaren piirtäminen

Posted: Wed Jan 15, 2014 7:18 pm
by Spacha
Reenailin siniä ja kosinia illanratoksi ja tein tällaisen pienen "kulmapyörän" tai miksi vain haluatte sitä kutsua:

Code: Select all

SCREEN 800,600

kx=ScreenWidth()/2
ky=ScreenHeight()/2

ClsColor cbWhite

kulma = 45

Repeat
    If LeftKey() Then
        kulma=kulma+1
    ElseIf RightKey() Then
        kulma=kulma-1
    EndIf
    
    If kulma > 360 Then
        kulma=0
    ElseIf kulma < 0 Then
        kulma=360
    EndIf

    Color cbBlack
    'kehä
    Circle kx-200,ky-200,400,0

    Color cbDarkBlue
    'oikea kylki
    Line kx, ky, kx+200, ky
    'vasen kylki
    Line kx, ky, kx+Cos(kulma)*200,ky+Sin(kulma)*200

    kulma_str$ = kulma+"°"
    
    'kulmakaari
    Color cbBlack
    For i = 0 To kulma
        Dot kx+Cos(kulma-i)*30,ky+Sin(kulma-i)*30
    Next i

    'kulmalukema
    Text kx+Cos(kulma/2)*60-TextWidth(kulma_str)/2,ky+Sin(kulma/2)*60-TextHeight(kulma_str)/2, kulma_str
    DrawScreen
Forever
Virheitä varmasti löytyy, tein tämän aika nopeasti. Ongelma on kuitenkin, miten CB:ssa olisi järkevintä toteuttaa tuo kulmakaareksi kutsumani kaari, ja päättyvä kaari yleensäkin, valmista komentoa kun ei ole(?). Toteutin tuon Dot -komennon avulla, mutta en usko että se on kaikkein suositelluin ja kompaktein tapa, eikä se näytäkään niin hyvältä kuin mahdollisesti voisi.

Merci, messieurs :)

Re: Kaaren piirtäminen

Posted: Thu Jan 16, 2014 1:08 am
by MrMonday
Valitettavasti en pääse testaamaan koodia, mutta mitä tuota katselin, niin pisti silmään seuraava toteutus:

Code: Select all

    If kulma > 360 Then
        kulma=0
    ElseIf kulma < 0 Then
        kulma=360
    EndIf
Coolbasicista löytyy funktio "WrapAngle()", mikä pitää huolen, että arvo pysyy 0-360 sisällä. Myöskin systeemissäsi tulee yksi aste liikaa. Ja merkkijonomuuttuja "kulma_str$" on ainakin kyseisessä ohjelmassa turha, sillä "Text"-komennolle voi suoraan antaa "kulma_str"-muuttujan sijaan tuon "kulma+"°" ". Vaikka nämä vinkit eivät itse kysymykseesi vastanneetkaan, niin toivottavasti edes jotain hyötyä oli :)

Menestystä koodailun parissa!

Re: Kaaren piirtäminen

Posted: Thu Jan 16, 2014 11:03 am
by Spacha
Kiitos kuitenkin :) Eilen illalla vaihdoinkin tuon wrapAnglen, mutten viitsinyt päivittää sitä tänne.
MrMonday wrote: Ja merkkijonomuuttuja "kulma_str$" on ainakin kyseisessä ohjelmassa turha, sillä "Text"-komennolle voi suoraan antaa "kulma_str"-muuttujan sijaan tuon "kulma+"°" ".
Tuo olikin uusi tieto, pitääpäs käydä vaihtaan.
MrMonday wrote: Myöskin systeemissäsi tulee yksi aste liikaa.
Siinähän tuli siten, että pienin kulma oli 0 ja suurin 360, joten minusta se ei haitannut (vaikkakin 0 ja 360 olivat päällekkäin)

Re: Kaaren piirtäminen

Posted: Sun Jul 06, 2014 6:11 pm
by atomimalli
Lineä dotin sijaan käyttäen voisi koosta riippuen hyppiä asteita yli sopivasti ja tulee siististimpi viiva. Linear mindsissä tuli nopeussyistä hirmu tarkkaan säädettyä kaava sille, miten monesta pätkästä milläkin etäisyydellä oleva viiva koostuu, jotta ne taipuisivat sulavan näköisesti, mutta olisivat myös tarpeeksi nopeita.
Samaan tapaan voisi kaarelle keksiä kaavan käytettävien viivojen määrään tai hyppypituuteen.