Forum: PC-Programmierung Logarithmische Darstellung


von Dirk (Gast)


Lesenswert?

Hallo.

Kann mir jemand sagen wie ich einen Punkt auf einem Display berechene.

Gegeben ist:

Display_Xmin = 0
Display_Xmax = 640

Value_Xmin = 0
Value_Xmax = 25000

SollPosition = X  (0 - 25000)

So das ganze soll nun aber nicht linear sondern logarithmisch auf das 
Display gebracht werden.

Bei mir ist gerade nur noch Luft im Kopf und ich finde keine passende 
Lösung.

Hat jemand eine Formel oder Quelle zum nachlesen / kopieren?

von rene (Gast)


Lesenswert?

Wenn Pascal auch verstaendlich ist :
http://www.ibrtses.com/delphi/dmcs.html

rene

von Dirk (Gast)


Lesenswert?

Hi Rene.

Pascal kann ich! Ist aber bei dem bisschen Code nicht erforderlich.

Werde mir den Code nach dem Ausschlafen ansehen.

Melde mich (Samstag nachmittag) mit dem Ergebnis!
Dirk


von Dirk (Gast)


Lesenswert?

So ich habe es getestet.

Die Funktion zum berechnen hat nur ein Problem Realwerte (xLow == 0) 
ergibt einen super Fehler.
Stellt sich auch die Frage, warum ich überhaupt mit xLow teilen muss.
Das hebt sich doch auf.

Auch einen Punkt an Position 0.0 anzeigen gibt Probleme.


Was ist wenn meine Realwerte (World) von zB. 10 bis -90 gehen. Wie muss 
ich dann damit umgehen?



von rene (Gast)


Lesenswert?

Eine logarithmische Skala kenn kein Null, und negative Werte schon gar 
nicht. Das ist von der Mathematik her so.

rene

von Theo (Gast)


Lesenswert?

Nicht mal die Funktionentheorie (komplexe Analysis) kennt den 
Logarithmus von 0.

Das ist eigentlich schon im ersten Semester (erste Hälfte) Mathe fällig!

http://de.wikipedia.org/wiki/Koordinatentransformation



von Dirk (Gast)


Lesenswert?

Sorry, ich wollte doch nur wissen wie ich damit umgehen soll.
Das ein Logarithmus von 0 nicht geht ist mit schon bekannt.

Ich habe halt Werte (+10 bis -90 dB) im Bereich 16Hz - 24KHz und will 
sie Darstellen.

Darum suche ich eine Lösung um:
1.) die dB Werte sauber Logarithmisch darzustellen

2.) die Frequenz erst ab 10Hz (nicht ab 0) auch Logarithmisch 
darzustellen

Bei der Frequenz Funktioniert es ab 0Hz ja schon ganz gut.
Aber ich möchte halt einen Ausschnitt von x1 - x2 Darstellen.



von rene (Gast)


Lesenswert?

Aha. -90..+10dB ist aber alles groesser Null. Diese Zahlen koennen 
entweder als dB in einer linearen dB Skala dargestellt, oder auf reale 
Werte umgerechnet in der logarithmischen Skala dargestellt werden. Wo 
ist das Problem ?

rene

von Dirk (Gast)


Lesenswert?

Es ist zwischen den Ohren!!!!!

Die dB Anzeige bleibt linear. Das habe ich gerade beschlossen, sieht 
besser aus.

Mir reicht es, wenn ich weiß wie ich die Frequenzen darstellen muß.

Also Anzeige 10 ... 25000  umgerechnet auf Pixel (min(0) - max(640)).

Ich verliere im bereich 0-10Herz einfach schon zu viele Pixel.
Kann sogar sein das ich erst bei 100Hz anfangen sollte.



von rene (Gast)


Lesenswert?

In der logarithmischen Darstellung kriegt jede Dekade gleich viel Platz. 
Dh, 20 Hz-20kHz sind 3 Dekaden, da bekommen 20-200, 200-2k, und 2k bis 
20k jeweils gleich viel. Und 10-20 sind auch schon wieder 1/3 Dekade.

rene

von Dirk (Gast)


Lesenswert?

Nach der Formel (so wie sie auf der Homepage steht):
x = 0 + (log(Pos) / log(25000)) * (640-0)

Habe ich halt bei:
Pos =     1   -> x =   0
Pos =    10   -> x = 145
Pos =   100   -> x = 291
Pos =  1000   -> x = 436
Pos = 10000   -> x = 582
Pos = 25000   -> x = 640

So weit so gut. Ok jede Dekade hat hier den gleichen Platz (145 Pixel)
Nur ich möchte halt nicht bei 1 sonder bei 10 anfangen.
Anders gesagt die ersten 145 Pixel müssen irgend wie weg.

Pos =   <10   -> x = -? ist egal wird angefangen
Pos =    10   -> x = 0
Pos =   100   -> x = ?
Pos =  1000   -> x = ?
Pos = 10000   -> x = ?
Pos = 25000   -> x = 640


von rene (Gast)


Lesenswert?

Ja, das XLow =10 und XHigh=25000 machen das.

rene

von Dirk (Gast)


Lesenswert?

So einfach???

Man bin ich blöd!!!!
Zum Glück bekommt das mein Ex-Mathelehrer nicht mit.


Danke, werde ich gleich ausprobieren.

von Dirk (Gast)


Lesenswert?

Wie ich es schon vermutet hatte:

ES GEHT!

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.