Was für eine mathematische Funktion könnte das hier sein?



  • Hi!
    Ich programmiere gerade eine Zielhilfe für einen Egoshooter. Ich habe bereits die Adresse im Speicher gefunden die ich ändern muss, um die Kamera auf der X-Achse zu drehen. Dabei habe ich einige Versuche gemacht und dessen Werte notiert.

    0° (Norden) entspricht 0.
    45° (Nord West) entspricht 4339593
    90° (Westen) entspricht 4371512
    135° (Süd West) entspricht 4392408
    180° (Süden) entspricht 4404219
    225° (Süd ost) entspricht 4415538
    270° (Osten) entspricht 4425382
    359° (Nord Ost) entspricht 4436980

    Dreht man sich etwas mehr als 359° (also > 4436980) fängt es bei 0 wieder an und geht ab 1° bei 4339593 weiter.

    Ich habe die Werte in eine Wertetabelle eingetragen und in Excel als Diagramm ausgeben lassen:
    http://img249.imageshack.us/img249/2604/funktion9gr.jpg

    Die Werte werden anscheinend nicht linear verarbeitet, wahrscheinlich um eine Manipulation zu verhindern. Ich denke aber, dass es dennoch mit etwas Mathematik machbar ist. Ich würde stark auf e oder wurzelfunktion tippen nur leider weiß ich nicht, wie ich die entsprechende funktion anhand dieser Werte rausfinden könnte. 😞

    Ein weiteres Problem ist, dass ich keine genaueren Werte als 45° herausbekommen kann, da diese nur per Augenwinkel und rumprobieren relativ genau geschätzt sind. Gerade die Werte die unter 45° sind, steigen sehr schnell an und wären hier besonders interessant. Das Fehlen dieser Werte dürfte die Ursache für den starken Knick am Anfang der Kurve sein.

    Ich bin nicht der Ober Mathecrack, ich weiß jedoch, dass man von einem Graphen irgendwie die Funktion herleiten kann. Wisst ihr wie das geht oder könntet ihr für mich rausfinden, wie die Funktion lauten könnte? Wäre sehr dankbar!



  • Meiner Meinung nach gibt es doch sowas wie Interpolationsprogramme, die aus gegebenen Werten eine Funktion bestimmen, oder versuchen die Werte durch diese Funktion zu approximieren.

    Vielleicht hilft ja Google ein wenig.

    Mehr kann ich dir im Moment leider auch nicht sagen 😞 .



  • Es gibt doch so eine e funktion für eine Kondensatorladekurve. Da konnte man irgendwie bestimmen, an welchen Wert sich die Funktion annähern soll. Kennt die zufällig jemand? Hatte das mal in der Schule, aber habe ich finde die Unterlagen nicht mehr. Ich denke das ist das, was ich suche.



  • Hansdampf schrieb:

    Es gibt doch so eine e funktion für eine Kondensatorladekurve. Da konnte man irgendwie bestimmen, an welchen Wert sich die Funktion annähern soll. Kennt die zufällig jemand? Hatte das mal in der Schule, aber habe ich finde die Unterlagen nicht mehr. Ich denke das ist das, was ich suche.

    Du hast *Null* Ahnung von was du da redest, oder?



  • blödmann schrieb:

    Hansdampf schrieb:

    Es gibt doch so eine e funktion für eine Kondensatorladekurve. Da konnte man irgendwie bestimmen, an welchen Wert sich die Funktion annähern soll. Kennt die zufällig jemand? Hatte das mal in der Schule, aber habe ich finde die Unterlagen nicht mehr. Ich denke das ist das, was ich suche.

    Du hast *Null* Ahnung von was du da redest, oder?

    wie du offensichtlich



  • Ich hatte das mal in der Schule. Mit hilfe einer e funktion, kann man die Lade und entladekurve eines Kondensators berechnen.
    Die kurve die sich aus meinen Werten ergibt, ähnelt so einer Ladekurve. Nun könnte ich doch einfach mit dieser Formel etwas rumrechnen um ein ähnliches Bild dieser Kurve zu erhalten. Die Formel lautete damals 3*(1-e^x) oder so ähnlich. Auf jedenfall konnte man z.B. mit x = 3 bestimmen, dass die Kurve anfangs stark ansteigt, sich dann der 3 auf der y-Achse nähert, diese aber nie schneidet! Genau soetwas bräuchte ich, ich habe allerdings - wie gesagt - keine Unterlagen mehr davon.



  • Bist du sicher, dass das kontinuierliche Werte sind und da nicht noch Flags oder sonstiges enthalten ist oder du deinen Bereich für die Variable einfach zu groß gewählt hast?
    Wie verhält es sich denn, wenn du Werte zwischen 0 und 4.000.000 ausprobierst?



  • interpretier den speicherinhalt mal als float oder double



  • Gute Idee, aber ist leider genau das gleich Bild. Sprich unlineare Funktion bloß mit reellen Zahlen.

    Ich habe übrigens die Funktion wieder rausgefunden, die ich gesucht hab. Sie lautet a*e(1-e-t)
    Diese Formel beschreibt (abgesehen davon das die Komponenten C und R fehlen) die Ladekurve eines Kondensators.
    Der Term (1-e^-t) bewirkt, dass sich der Exponent von e der 1 anähert. Dadurch nähert sich die Kurve automatisch dem Wert a an.
    (da z.b 1 - e^-9 = 1- 0,00000009 = 0,999999991)

    Leider ist es doch nicht das, was ich gesucht habe. Ich werde nun erstmal doch versuchen müssen, ein paar genauere Messungen vornehmen, um mehr Punkte rauszufinden.



  • Hansdampf schrieb:

    Ich werde nun erstmal doch versuchen müssen, ein paar genauere Messungen vornehmen, um mehr Punkte rauszufinden.

    👍

    haste irgendwas verlä0ßliches zum messen? dreht er bei "einem tastendruck" immer gleich weit? oder kannste dir mit edding zwei senkrechte linien (ca 14 grad) auf den monitor malen und dich in einen raum stellen mit echt vielen markanten geländepunkten und leichen und so und dann immer die geländepunkte, die auf der linken linie waren auf die rechte drehen und speicherinhalt notieren? du bemerkst erst bei 360grad, daß du durch bis und wieviel grad zwischen den linien waren.
    mach am besten mehrere messungen, damit die messfehler nicht so schlimm werden. könnte ja sein, daß die chause ganz einfach zwischen 1 und 359 grad linear läuft und bei 0 ist ein sonderfall, der auch im code wegge-if-t wird.



  • Hmm gute Idee. 🙂 Stimmt, 0 ist ein Sonderfall und wird meiner Meinung nach auch weggeifft. Ich habe schon versucht eine Map mit einem Kolloseum ähnlichen, runden Raum zu erstellen, wo auf der Innenseite eine Textur mit 360 Stichen drauf liegt. Dort hätte ich in 5er oder 10ner schritten abgezählt, doch leider lässt sich die Map nicht kompilieren, da die Texturlage ziemlich genau sein muss, was mit der alten Engine aber nicht wirklich möglich zu sein scheint.

    Ich werde mal den "Trick" mit dem Edding probieren, allerdings werde ich Klebestreifen verwenden, denn die gehen sicher leichter wieder ab. 😉



  • Die Map lies sich nun doch kompilieren, so dass ich eine äußerst genaue Messung vornehmen konnte. 🙂 Ich habe dabei in 10° schritten gemessen und Notiert. Da die Kurve im unteren Bereich sehr Stark ansteigt, habe ich dort in 2° schritten gemessen. Hier das neue Excell Diagramm:
    http://img485.imageshack.us/img485/431/neuekurve3zj.jpg

    Da es ab 70° 10ner Schritten weiter geht, bricht die Kurve in der Mitte etwas ein. Ich gehe davon aus, dass die Kurve sich wie die rote gestrichelte Linie verhält. Was meint ihr? Ich würde sagen Wurzelfunktion.



  • Sieht verdammt danach aus , am anfang zwar bissle steil aber das täüscht sicher nur.
    ich würd auch sagen wurzelfunktion



  • hansdampf schrieb:

    http://img485.imageshack.us/img485/431/neuekurve3zj.jpg

    sind die abstände auf der x-achse ungleich?
    mach ein x-y-diagramm (wenn du excel verwendest). dann stimmen die abstände.



  • edit: Ich bin hansdampf, also nicht Wundern. 😃

    Danke für den Tipp Volkard, ich habe jetzt ein XY-Diagramm benutzt:
    http://img226.imageshack.us/img226/7762/kurvexy7ui.jpg

    Es sieht jetzt für mich zu 90% nach einer Wurzelfunktion aus. Ich habe die obere Hälfte der Funktion in Paint gespiegelt und unten "dranngeklebt" sieht dann verdammt nach einer nach rechts geöffneten Parabel aus, was ja einer Wurzelfunktion entspricht:
    http://img226.imageshack.us/img226/696/kurvexywurzel5xd.jpg

    Ich habe schon mit meinen Mathelehrern gesprochen und werde genaueres am Montag mit ihnren bereden. Eine Wurzelfunktion ist ja folgendermaßen definiert: a*[nte wurzel aus x]+C (Sorry, aber das Wurzeltag funktioniert nicht, bzw. ich weiß nicht, wie man es korrekt benutzt!?)

    Ich habe nun 3 Unbekannte. Und zwar a,n und x. C ist 0, da die funktion auf der X-Achse nicht verschoben ist und ihren Scheitelpunkt bei (0|0) hat.

    Theoretisch müsste ich doch jetzt 3 Gleichungen aufstellen können und mithilfe der Gauschen Elimination (Additionsverfahren ect.) die Unbekannten lösen können!? Ich müsste dann eine Formel erhalten, wo ich nur eine Gradzahl einsetzen muss, um dann den genauen "Drehwert" für den Egoshooter zu erhalten. z.B. Für 180° und 90°:

    a*[nte Wurzel aus 180] = 4404219
    a*[nte Wurzel aus 90] = 4371579
    ect.

    Das müsste doch irgendwie so machbar sein, oder?



  • Wenn du die Daten in einem log-log Plot darstellst, müsste sich doch eine Gerade ergeben, oder? Wäre die nicht leichter zu schätzen? 😕



  • Hmm, was ist ein loglog plot?
    Habe eben versucht nach dem Additionsverfahren zu lösen. Das große Problem ist das n der Wurzel. Ich habe mich dann irgendwann in zig logarythmen verstrickt und komme so nicht weiter. Mal sehn ob meine Mathelehrer rat wissen. 😃



  • Perner schrieb:

    Hmm, was ist ein loglog plot?

    beide achsen verstellen, daß sie logarithmische skala haben.
    mach am besten auch nen loglog plot und zeig den.

    und stell die tabelle online, damit wir ein wenig mit deinen daten spielen können. hab am sonntag sonst vielleicht ne stunde langeweile.

    aber dein dingend ist keine wurzelfunktion.
    eher log(x).



  • Habe mal die Excell Tabelle hochgeladen:
    http://home.ripway.com/2005-11/500915/Tabelle.xls



  • Perner schrieb:

    Habe mal die Excell Tabelle hochgeladen:
    http://home.ripway.com/2005-11/500915/Tabelle.xls

    Ich habe mal mit matlab einen log-log plot gemacht: http://mitglied.lycos.de/dooya/loglog.jpg
    Sieht aus wie ein broken stick.
    FÜr sowas sollte es doch eigentlich Schätzverfahren geben, oder?


Anmelden zum Antworten