Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Viivahistogrammi ja pyöristys pikseleiksi

Sivun loppuun

kayttaja-3842 [08.09.2011 12:07:56]

#

Tervehdys kaikki,

Tömäsin pieneen laskennalliseen ongelmaan tekiessäni histogrammi näkymää softaani.

Elikkäs ajatellaan kuvitteelinen histogrammi näkymä joka piirtää dataa vastaavaa käyrää. Sanotaan, että data luetaan char taulukosta jonka koko on 100 -tavua.

Seuraavaks piirretään taulukossa oleva data käyräksi. Skaalaamisen olen ajatellut laskettavan ( leveys / taulukon_koko ). Eli sanotaan että ikkunan koko on 566.

Yhden pisteiden väliksi saamme koon 5.66. Piirrossa pikseli tosin piirretään kohtaan 5. Tämä tarkottaa sitä, että skaalaus ei mene oikein, koska ( 5 * 100 ) = 500. Elikkäs 66 pikseliä jää yli.

Kysymys kuuluukin. Millä lasku algoritmillä viivat saataisiin skaalattua oikein?

Lebe80 [08.09.2011 12:33:45]

#

Tuskin siihen mitään algoritmiä tarvitaan vaan ihan ala-asteella opitulla jakolaskulla jaat "ikkunan koon" "sataan osaan". Eri asia on sitten haluatko pyöristää luvut alas-, ylöspäin vaiko miten haluatkaan tasapikseleille.

kayttaja-3842 [08.09.2011 12:42:44]

#

EI se niin voi olla. Mitä sitten jos lasku ei mee tasan? Kuten esimerkissäni oikeaan reunaan jää 66 pikselin rako! Ei ole hyvä näin.

Vai tarkotatko, että pisteiden etäisyys on staattisesti se 100 pikseliä esim.

Gaxx [08.09.2011 13:00:01]

#

Vinkki: 98 * 5,66 = 554,68 ~= 555.

Lebe80 [08.09.2011 13:26:54]

#

kayttaja-3842: no tietenkin jos lasket jo valmiiksi "pyöristetyillä" luvuilla niin lopputulos ei voi olla kuin väärä.


Tässä siis esimerkkikuvat mainitsemallani tavalla sadalla pisteellä ja eri kokoisina:
http://games.terolepisto.net/graafi/

edit:
ja tietenkin itse voit käyttää pisteiden sijaan yhteneväistä viivaa, palkkeja, ympyröitä tai vaikka paloautoja.

kayttaja-3842 [08.09.2011 13:50:34]

#

Siis ideani pointtini olikin ettei pikseliä voi piirtää desimaaliin, mutta asiaan. Sain itse tuon toimimaan kuitenkin. Ja ratkaisu on skaalari kerroin. :)

Lebe80 [08.09.2011 13:51:44]

#

Lebe80 kirjoitti:

Eri asia on sitten haluatko pyöristää luvut alas-, ylöspäin vaiko miten haluatkaan tasapikseleille.

jtha [08.09.2011 14:51:50]

#

Hö, älä tietenkään pyöristä sitä laskettua pikselin väliä.
Siis 5.66 * n = Xpaikka. Ainakaan VB:ssä ei tarvitse tuloakaan pyöristää vaan näyttö tekee sen automaattisesti.

tkok [08.09.2011 21:26:54]

#

jtha kirjoitti:

Ainakaan VB:ssä ei tarvitse tuloakaan pyöristää vaan näyttö tekee sen automaattisesti.

Minkä merkkinen/mallin näyttö?

Metabolix [08.09.2011 22:25:43]

#

kayttaja-3842 kirjoitti:

Siis ideani pointtini olikin ettei pikseliä voi piirtää desimaaliin, mutta asiaan. Sain itse tuon toimimaan kuitenkin. Ja ratkaisu on skaalari kerroin. :)

Kuulostaa purkalta. Datalla ei ole mitään tekemistä piirtämisen kanssa, eli voit laskea kaiken liukulukuina ja muuntaa koordinaatit vain piirtofunktiota kutsuessasi.

x = 123.456;
y = 234.567;
piirra((int) x, (int) y);

Voit laskea koko skaalauksen samalla kertaa:

piirra(
  (int) (piirto_x0 + piirto_w * (x - data_x0) / data_w),
  (int) (piirto_y0 + piirto_h * (y - data_y0) / data_h)
);

Tässä siis x0 ja y0 ovat pienimmät arvot (kuvaajan kulma) ja w ja h ovat käytettävä lukuväli (kuvaajan koko).

jtha [08.09.2011 23:07:00]

#

tkok kirjoitti:

jtha kirjoitti:

Ainakaan VB:ssä ei tarvitse tuloakaan pyöristää vaan näyttö tekee sen automaattisesti.

Minkä merkkinen/mallin näyttö?

hmm, "näyttö" oli huono sana :-) Varmaan se pyöristyy jo esim. print-funktiossa. Kuitenkaan desimaaleista ei tarvitse välittää piirrettäessä VB:ssä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta