Frage zu exp()
-
Hallo zusammen!
Ich habe mal eine Frage zur exp() Funktion bzw. deren Ergebnis. Was die Funtkiontut ist mir soweit klar. Hier erstmal der Code um den es geht:
double vspd = adiru.VerticalSpeed(); if(vspd>=0) { if(vspd>6000) vspd = 6000; vs =(exp(3.5*vspd/6000))-90; } else { vspd = fabs(vspd); if(vspd>6000) vspd = 6000; vs = (1-exp(3.5*vspd/6000))-90; }Soweit auch Ok. Mein Problem: je groesser "vspd" wird um so schneller steigt "vs" an, was ja soweit logisch ist. Ich moechte aber genau das Gegenteil haben, heisst je groesser "vspd" wird umso langsamer soll "vs" steigen.
Falls jemand eine Idee hat ware ich fuer einen Tip dankbar. Moeglich das die Loesungeinfach ist aber im Moment komme ich nicht darauf. Bin eben nur "Hobbyprogrammierer"

Viele Gruesse
Sven
-
Eventuell könnte log, also der Logarithmus deine Lösung sein?

-
Badestrand schrieb:
Eventuell könnte log, also der Logarithmus deine Lösung sein?

Danke fuer den Hinweis, jetzt sieht das ganze schon recht gut aus, nur noch ein wenig "feilen" (es geht um grafische Ausgaben mit GDI+, da brauche ich die Werte fuer die Transformation).
double vspd = adiru.VerticalSpeed(); if(vspd>=0) { if(vspd>6000) vspd = 6000; vs =(log(4.0*vspd)*3.5)-90; } else { vspd = fabs(vspd); if(vspd>6000) vspd = 6000; vs = (1-log(4.0*vspd)*3.5)-90; }
-
Ich weiß nicht ob du's weißt, aber wenn du einen spezifischen Logarithmus willst, also z.B. auf der Basis von 2, dann erfüllt das glaubich den Zweck: log2(x) = log(x) / log(2). Das log aus der Standardbibliothek arbeitet immer auf derselben Basis. Und je nach Basis variiert ja die Kurve
