PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interval abbilden


instinct
2009-07-13, 09:57:52
Hi,

ich hab Werte im Bereich [-1.0;1.0]. Die Werte will ich als Graustufen interpretieren, also muss ich sie ja auf das Interval [0;255] bringen.
Minimaler und maximaler Wert ist gegeben.

Ich machs wie folgt:
ov = ürsprünglicher Wert [-1.0;1.0]
nv = neuer Wert [0.0;255.0]
nv = (ov - min) * (255.0 / (max - min))

Ich bekomme leider nicht das Erwartete raus. Mach ich irgendwas an der Berechnung falsch?

Senior Sanchez
2009-07-13, 10:36:14
nv = 255.0/2 + 255.0/2 * ov

nv = (1 + ov) * 255.0/2

Ist jetzt zwar nicht schön generisch, aber für dein Beispiel passts. ;-)

DocEW
2009-07-13, 13:22:09
Verstehe ich nicht... bei dir ist max=1.0 und min=-1.0, oder?
Dann sollte das
nv = (ov - min) * (255.0 / (max - min))
und das
nv = (1 + ov) * 255.0/2
exakt das Gleiche tun (und zwar das Richtige)!

instinct
2009-07-13, 16:23:24
Ich gehe auch davon, dass der Fehler woanders im Program liegt. Ich wollte nur sichergehen. Danke für die Hilfe.

rotalever
2009-07-13, 22:42:13
Was kommt denn raus? Oder sieht es beim Zeichnen nur falsch aus?

Gast
2009-07-14, 08:45:29
Ich bekomme leider nicht das Erwartete raus. Mach ich irgendwas an der Berechnung falsch?

.... wie wärs wenn du es einfach testest? Dann weißt du wenigstens mit Sicherheit ob das Problem an deiner Intervallfunktion liegt oder woanders...

toInterval255(float value, float min, float max);

assert(toInterval255(0.5,0,1) == 127))
assert(toInterval255(0,-1,1) == 127))
assert(toInterval255(0.5,-1,1) == 63))

pest
2009-07-14, 09:09:10
ich hab Werte im Bereich [-1.0;1.0]. Die Werte will ich als Graustufen interpretieren, also muss ich sie ja auf das Interval [0;255] bringen.
Minimaler und maximaler Wert ist gegeben.

Ich machs wie folgt:
ov = ürsprünglicher Wert [-1.0;1.0]
nv = neuer Wert [0.0;255.0]
nv = (ov - min) * (255.0 / (max - min))

Ich bekomme leider nicht das Erwartete raus. Mach ich irgendwas an der Berechnung falsch?

wenn dir die mathematischen Hintergrüne klarer sind, erkennst du
warum du das tust was du tust (was auch korrekt ist)

es handelt sich um eine eindimensionale (affine) lineare abbildung

willst du den ursprünglichen wert ov aus dem intervall [a0,b0] in den intervall [a1,b1] abbilden musst du

- den richtungsvektor bestimmen (ursprünglichen wert auf 0 "normieren") [x] check
- das verhältnis der intervalllängen berechnen [x] check
- parallelverschiebung (an die anfangsgrenze des neuen intervalls anpassen) [ ] brauchst du hier nicht da a1=0

also nv=(ov-a0)*((b1-a1)/(b0-a0))+a1 [x] check

;)

Gast
2009-07-15, 13:07:03
[...]
es handelt sich um eine eindimensionale (affine) lineare abbildung

Sehr schön gesagt. Mathematiker? ;)

[...]
- den richtungsvektor bestimmen (ursprünglichen wert auf 0 "normieren") [x] check

Wo gibts denn bei einer eindimensionalen Funktion Vektoren? Das sagt man dann Skalar dazu, wenn schon... :D

- das verhältnis der intervalllängen berechnen [x] check
- parallelverschiebung (an die anfangsgrenze des neuen intervalls anpassen) [ ] brauchst du hier nicht da a1=0

Der Parallelitätsbegriff will sich mir im eindimensionalen auch nicht so recht erschließen... sagen wir einfach Offset dazu, oder?

also nv=(ov-a0)*((b1-a1)/(b0-a0))+a1 [x] check

;)
:)

pest
2009-07-15, 14:24:23
Wo gibts denn bei einer eindimensionalen Funktion Vektoren? Das sagt man dann Skalar dazu, wenn schon... :D


der raum der affinen funktionen ist ein vektorraum, elemente eines vektorraums sind vektoren :D


Der Parallelitätsbegriff will sich mir im eindimensionalen auch nicht so recht erschließen...


naja translation halt...ich denke meist n-dimensional ;)