Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Täydellinen ympyrä

Sivun loppuun

kayttaja-3842 [16.09.2009 08:35:34]

#

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);
 }

Teuro [16.09.2009 08:55:42]

#

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.

Grez [16.09.2009 08:59:01]

#

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)

kayttaja-3842 [16.09.2009 09:07:15]

#

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. :)

Grez [16.09.2009 09:09:19]

#

Jees, ja kokeilemallahan se selviää, mikä on hyvä kerroin.

kayttaja-3842 [16.09.2009 09:13:54]

#

Näinhän se menee. :) Pitää rupee kokeilee.

os [16.09.2009 09:18:05]

#

Ympyrän piirtämiseen kannattaa käyttää mieluummin tätä menetelmää, jolla saadaan aina yhtenäinen "yhden pikselin levyinen" viiva.

http://en.wikipedia.org/wiki/Midpoint_circle_algorithm

kayttaja-3842 [16.09.2009 09:40:21]

#

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.

os [16.09.2009 10:33:05]

#

No itse asiassa se on varmaan noin luokkaa sata kertaa nopeampi :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta