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?
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
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?
Eine logarithmische Skala kenn kein Null, und negative Werte schon gar nicht. Das ist von der Mathematik her so. rene
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
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.
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
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.
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
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
So einfach??? Man bin ich blöd!!!! Zum Glück bekommt das mein Ex-Mathelehrer nicht mit. Danke, werde ich gleich ausprobieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.