Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Väritys lämpötilan mukaan

Sivun loppuun

kayttaja-3842 [22.08.2006 13:42:58]

#

Termosta vaan kaikille!

Juu, et olis sellanen ongelma, et voisko joku tehä minulle pienen esimerkin. Eli, esimerkin tulisi näyttää miten voin tehdä lämpenemis pisteen? Eli mitä lähempänä pikselit ovat esim pistettä 50,50 eli x = 50 y = 50. niin sitä keltaisemmaksi se menee ja mitä kauempana sitä punaisemmaksi ne menee..Eli luonnollisesti kauempana tulisi olla kylmempää kuin itse pisteessä.

pukki [22.08.2006 15:37:48]

#

Mitä rajapintaa tai kirjastoa käyttäen tämä esimerkki pitäisi tehdä?

En lupaa silti tekeväni tätä. (mutta saatan hyvinkin tehdä jos jaksan, kun ei tässä mitään muutakaan ole nyt käsillä)
Ota minustakin nyt sitten selvää :p

kayttaja-3842 [22.08.2006 15:55:07]

#

Joo :D.. Eli tämä tulisi toteuttaa SDL:llä.

pukki [22.08.2006 20:49:16]

#

No nyt on sitten puuhaa kädet täynnä, mutta sitenhän tuo tapahtuu, että mitä kauempana värjättävä pikseli on hotspotista (50,50 tai mikä ikinä se onkaan), niin sen mukaan sitten sen tarvittavan RGB-arvon valitset.

Heikki [22.08.2006 21:03:14]

#

Suoraa koodia en lähde tekemään, mutta tässä yksinkertainen periaate tuon tekemiseen

Kahden pisteen välinen etäisyys on helppo laskea Pythagoraan lauseella: pisteen (x,y) etäisyys pisteestä (50,50) on:
r^2 = (x-50)^2 + (y-50)^2
Neliöjuuren ottaminen tuottaa tarkan etäisyyden, mutta tässä tapauksessa voit käyttää myös etäisyyden neliötä jolloin säästyt hitaalta neliöjuurioperaatiolta.

Nyt kun tiedät pisteen etäisyyden, sinun on generoitava jotenkin pisteen väri. Täysin keltaisen värin RGB-värikoodi on 255,255,0 (eli punaista ja vihreää täydet eikä sinistä lainkaan). Punaisen värin taas 255,0,0. Eli sinun on siis vain etäisyyden pienentyessä pienennettävä vihreän värin osuutta pikselin RGB-värikoodissa.

HeadCheese [23.08.2006 19:50:55]

#

Hoh, ei varsinaisesti mitään aiheeseen liittyvää, mutta innostuin tästä niin että tein ASCII-version javalla. Hyvää harjoitusta tämmöiselle sunnuntaikoodarille :)

Grusifix [24.08.2006 22:36:50]

#

Itselleni tuli hieman erilainen menettely mieleen:

Pikselille P on määritetty väriksi C, johon hotspot H ei riittävän etäisyyden (r) vuoksi vaikuta (vaikutusalue [T_hot,T_cold]). Kun P saapuu vaikutusalueelle, sen jokaista kanavaa Rc,Gc,Bc muutetaan samalla delta-arvolla, ettei harmaasävy muutu.
Eli

channel = max(Rc, Gc, Bc)
delta = ((Tcold - r)/(Tcold - Thot))*(255 - channel))

BlitPixel( x, y, Rc+delta, Gc+delta, Bc+delta)

"Kuva":

H--Thot---------(P)-----Tcold-------

kayttaja-3842 [25.08.2006 19:34:31]

#

Mitä merkki ^ meinaa lausekkeessa r^2 = (x-50)^2 + (y-50)^2

Pöytälamppu [25.08.2006 20:09:11]

#

^ merkki tarkoittaa potenssiin korotusta
(esim. x^2 = x*x, x^3 = x*x*x)

Megant [28.08.2006 14:50:35]

#

Ja kannattaa muistaa, että C:ssä ^ tarkoittaa xoria.
C:n kanssa potenssi lasketaan vaikka näin:

#include <math.h>

int main()
{
     int luku;
     luku = pow(2, 5); // 2 ^ 5

     return 0;
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta