Kaaren piirtäminen

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
Spacha
Newcomer
Posts: 6
Joined: Wed Jan 15, 2014 9:43 am
Location: C:/Program Files(x86)/CoolBasic/Media/mushroom.bmp
Contact:

Kaaren piirtäminen

Post by Spacha » Wed Jan 15, 2014 7:18 pm

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 :)
Ohjelmistolla ja katedraalilla on paljon yhteistä - ensin rakennamme sitä, sitten rukoillaan.

-Sam Redwine

MrMonday
Advanced Member
Posts: 377
Joined: Fri Oct 10, 2008 2:35 pm

Re: Kaaren piirtäminen

Post by MrMonday » Thu Jan 16, 2014 1:08 am

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!

User avatar
Spacha
Newcomer
Posts: 6
Joined: Wed Jan 15, 2014 9:43 am
Location: C:/Program Files(x86)/CoolBasic/Media/mushroom.bmp
Contact:

Re: Kaaren piirtäminen

Post by Spacha » Thu Jan 16, 2014 11:03 am

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)
Ohjelmistolla ja katedraalilla on paljon yhteistä - ensin rakennamme sitä, sitten rukoillaan.

-Sam Redwine

User avatar
atomimalli
Moderator
Moderator
Posts: 226
Joined: Wed Aug 29, 2007 3:55 pm

Re: Kaaren piirtäminen

Post by atomimalli » Sun Jul 06, 2014 6:11 pm

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.

Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests