Terve kaikille,
Elikkäs tekasin koodain C/C++ sekä SDL:ää hyädyntäen, joka siis piirtää ympyrän ruudulle.
Noh ympyränhä piirto on mielestäni todella simppeli, mutta itse en tajua sitä, että kuinka paljon pikseleitä mikäkin pallo tarvitsee.
Tässä nykyinen ympyrän piirtävä koodini. Koodi piirtää ympyrän hienosti, mutta ympyrän viivassa on välejä. Eli siis ongelmani on se, että miten saisin laskettua, että kuinka monta pikseliä mikin pallo tarvitsee? Voidaanko se laskea esim. tarvittavat pikselit = (pii*sade).
Miten saada koodin tekemään oikealla tavalla täydellinen ja virheetön pallolinja.
float kulmaX = 0; float kulmaY = 0; //Eli for silmukka kokonais hyppyjen takia hyppää välillä yhden pikselin ylitse. for( float a = 0.0; a < 360; a++ ){ kulmaX = cos(DegToRad(a)); kulmaY = sin(DegToRad(a)); draw.putpixel(screen, (640/2)+(sade*kulmaX), (480/2)+(sade*kulmaY), 0xffffffff); }
Kuinka monta pistettä tuo sinun silmukkasi piirtää? Minusta voisit aivan hyvin käyttää int muuttujaa laskurina, joka muunnetaan doubleksi tarvittaessa. Jokaiselle tekemällesi ympyrälle tulee siis vakiomäärä pikseleitä (360 kpl). Toisin sanoen pienet ympyrät ovat tarkempia kuin suuret, koska pienillä ympyröillä on suurempi ppi (points per inch) arvo.
Ympyräkuvio on määritelmän mukaan sellainen pisteiden joukko, joiden etäisyys kiinteästä pisteestä on vakio. Näytöllä yksittäinen pikseli ilmaistaan kahdella kokonaisluvulla. Toisaalta ympyrän määritelmän mukaan ainakin yhdelle pikselille tulee sijainniksi ei kokonaisluku.
Niin, jos haluat tehdä ympyrän, jossa pisteitä on tasan yhden pikselin välein, niin ympyrässä on silloin 2πr pistettä.
Käytännössä pyöristyvirheiden vuoksi siihen jäisi siltikin rakosia. Hyvä lopputulos voisi tulla 1,5 -kertaisela määrällä, eli 3πr pisteellä.
Ja r on siis säde. (of koos)
Juuri tuota hainkin takaa, eli se, että miten saada selvitettyä, että kuinka paljon pikseleitä minkä kokoinenkin ympyrä tarvitsee, eli toisin sanoen sain vastukseni. Kiitos paljon teille. :)
Jees, ja kokeilemallahan se selviää, mikä on hyvä kerroin.
Näinhän se menee. :) Pitää rupee kokeilee.
Ympyrän piirtämiseen kannattaa käyttää mieluummin tätä menetelmää, jolla saadaan aina yhtenäinen "yhden pikselin levyinen" viiva.
Tuo vaikutta aivan mahtavalta algorytmiltä. Tosin tuo menetelmä on varmasti hitaampi mitä tuo ns. normaali algorytmim, mutta nopeutta ei oikeestaan tarvita, joten tuo passaapi ihan hyvin minun käyttöön. :) Kiitos paljon os.
No itse asiassa se on varmaan noin luokkaa sata kertaa nopeampi :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.