[C] functie R1 -> R3

Pagina: 1
Acties:

  • Postie
  • Registratie: April 2001
  • Laatst online: 18-08 12:04

Postie

No beer, no glory

Topicstarter
Ik probeer een functie te bedenken die een float 1.0<=f<=5.0 mapt naar (x,y,z), waarbij
0.0<=x,y,z<=1.0. Dit moet wel op een lineare manier gebeuren. Die f is namelijk een gewicht en die 3 andere zijn waarden voor opengl rgb.

Tis een soort generatie van een colourmap. Maar x=y=z=0.0 en x=y=z=1.0 zijn niet toegestaan (zwart en wit).

Live every day, as if it's your last one


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

wat heb je al?
wat lukt er niet?
geef iets meer info
enz enz

Doet iets met Cloud (MS/IBM)


  • Postie
  • Registratie: April 2001
  • Laatst online: 18-08 12:04

Postie

No beer, no glory

Topicstarter
Het maakt niet uit wat ik heb. Het lukt mij gewoon niet om zo'n functie te bedenken zoals hierboven beschreven staat. Die functie is noodzakelijk namelijk voor mijn programma.



Ik kan niet een algoritme bedenken die het bovenstaande netjes doet.

Maar als je stukjes code wilt, dan kan dat uiteraard geregeld worden, als je denkt daardoor meer inzicht in het probleem te krijgen.

Live every day, as if it's your last one


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Zoiets als dit?
code:
1
Fnew = (Fold-1.0f)/4.0f;

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
code:
1
ScaledVal=RawVal*(Scaledmax-ScaledMin)/(Rawmax-Rawmin)+ScaledMin

Of zoiets?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

probeer jij niet gewoon een hue naar rgb converter te bouwen?

oftewel, 0.0 is rood, 2.0 is groen, 4.0 is blauw en alles daartussenin interpoleren

zo dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void hue2rgb (float & r, float & g, float & b, float hue)
{
    if (hue < 1.f)
    {
      r = 1.f;
      g = hue;
      b = 0.f;
    }
    else if (hue < 2.f)
    {
      r = 2.f - hue;
      g = 1.f;
      b = 0.f;
    }
    else if (hue < 3.f)
    {
      r = 0.f;
      g = 1.f;
      b = hue - 2.f;
    }
    else if (hue < 4.f)
    {
      r = 0.f;
      g = 4.f - hue;
      b = 1.f;
    }
    else if (hue < 5.f)
    {
      r = hue - 4.f;
      g = 0.f;
      b = 1.f;
    }
    else
    {
      r = 1.f;
      g = 0.f;
      b = 6.f - hue;
    }
}

(hier loopt het dus van 0.0 <= f < 6.0)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1