Expotentielle Kurve (quasi konvex) und "normale" Kurve (quasi konkav) berechnen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Expotentielle Kurve (quasi konvex) und "normale" Kurve (quasi konkav) berechnen

      Hallo Mathepros,

      ich möchte zwei Pfade erstellen. Wobei die Start- und Endpunkte festgelegt sind. Und dazwischen will ich einmal so ne Kurve haben:


      Und einmal so eine Kurve:



      Das Zweite hatten wir schon einmal aber nur für einen Wert. Ich will aber x und y.
      Ich ärger mich mal wieder, da ich immer wieder feststellen muss dass ich in Mathe gar nix kapiere, nur querdenken kann ich gut.

      Aber für manche von euch gib's wahrscheinlich nix Leichteres.

      Schon mal Danke :)
    • Wäre vielleicht nicht die beste Lösung, aber eine Lösung ^^:
      1.

      GML-Quellcode

      1. y = power(x,2)/power(max_len,2));

      2. Das sieht aus wie eine Logarithmische Funktion aus (bin mir nicht sicher, auch nicht bei dem Namen ^^)

      GML-Quellcode

      1. y = log2(x)/log2(max_len);


      Beide "Formeln" geben dir einen Wert von 0 bis 1. x und y solltest du natürlich austauschen.

      Wenn die Formeln von 0 bis max_len gehen sollen:
      1.

      GML-Quellcode

      1. ​y = power(x,2)/max_len;

      dadurch dass .../max_len² ja max_len*max_len und sozusagen auch /max_len/max_len ist und ich dann ja *max_len mache, kürzt sich das eine wieder weg
      2.

      GML-Quellcode

      1. ​y = log2(x)/log2(max_len) * max_len;


      Möglicher Code zum erstellen.

      GML-Quellcode

      1. var max_len = 100;
      2. var path = path_add();
      3. for(var pos=0; pos<max_len; pos++)
      4. path_add_point(path,pos, power(pos,2)/max_len); //1. Variante
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Husi012 ()

    • also eine expontial Funktion hat die allgemeine Form

      Quellcode

      1. y = a^x + b

      Weiterhin legst du ja zwei Punkte fest, durch diese die Funktion verläuft, nennen wir sie A und B.
      Daraus ergibt sich das,

      Quellcode

      1. Ay = a^Ax + b,
      2. By = a^Bx + b

      erfüllt sein müssen.
      Nun würde ich so umstellen

      Quellcode

      1. b = Ay - a^Ax,
      2. a = wurzel(By - b, Bx)


      Beispiel:

      Quellcode

      1. A(0/6), B(5/9)
      2. 6 = a^0 + b, b = 5
      3. 9 = a^5 + b, a = wurzel(9 - b, 5) = wurzel(4, 5) = 1,31...
      4. -> y = 1,31^x + 5


      Code(Gilt aber nur für Ax = 0):

      GML-Quellcode

      1. var Ax, Ay, Bx, By, a, b;
      2. // Naturlich mi´t deinen Werten ergänzen
      3. Ay = 0;
      4. Bx = room_width;
      5. By = room_height;
      6. var path = path_add();
      7. // Nur moeglich wenn Ax=0, da a^0 = 1
      8. b = Ay - 1
      9. a = power(By - b, 1/Bx);
      10. for (xpos = 0; xpos < Bx; xpos+=10) {
      11. path_add_point(path, xpos, By - power(a, xpos) + b, 20);
      12. }
      Alles anzeigen


      Beispiel Projekt:
      http://www.file-upload.net/download-11932494/TestExpontiel.gmz.html
    • Die gleiche Idee wie Husi hatte ich auch schon, allerdings gibt es da ein Problem:
      Morpheus schreibt, dass Start- & Endpunkt festgelegt sind. (d.h. 1. & letzter y-Wert ist vorgegeben)
      Was ich meine ist, wenn Punkt 1 bei (0|36) ist und man die Funktion f(x)= x2 zeichnet liegt dieser Punkt nicht auf der Funktion.
      Morpheus wollte allerdings die Funktion von einen Punkt zu einen anderen zeichnen. Demnach muss man die Funktion so verändern, das die beiden Punkte auf dem Graphen der Funktion liegen.
      z.B bei einer quadratischen Funktion sieht die ganze Funktionsgleichung wiefolgt aus:y = a*(X+d)2+k (falls ich mich nicht irre)
      Um die Funktion jetzt auf 36 anzuheben (Was der erste y-Wert in meinem Beispiel ist) müsste man schonmal y= x2 +36 schreiben.
      Mathematisch nachweisen das die Punkte auf der Funktion liegen kann ich, doch wie ich eine Funktion mithilfe ihrer Parameter an 2 Punkte anpasse habe ich noch nie programmiert.
    • Oh das hatte ich erst mit einberechnet, dann aber wieder aus versehen weg gemacht.
      1.

      GML-Quellcode

      1. ​y = (power((x-x1)/width,2)*height)/height;
      von 0-1

      GML-Quellcode

      1. ​y = power((x-x1)/width,2)*height+y1;
      genaue Werte
      2.

      GML-Quellcode

      1. y = log2((x-x1))/log2(width);​
      von 0-1

      GML-Quellcode

      1. ​y = log2((x-x1))/log2(width)*height;
      genaue Werte

      Das ist gerade nur aus'm Kopf und kann unendliche Fehler enthalten
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • Leute, Leute... wie ihr mit Variablen und Funktionen jonglieren könnt. Will ich auch können :)

      Danke Leute! Ich hab für die erste Kurve das so gemacht wie in Husi's ersten Post. Funzt wunderbar. Das Zweite schaut nicht so aus wie es soll, hab allerdings nicht all eure Ideen ausprobiert. Mit der Formel aus dem letzten Post dieses Threads klappt auch die zweite Variante (fast) muss nur noch einen richtigen Wert finden. Ansonsten muss ich mich ncohma hier reinlesen.

      edit: Husi deie Formeln ausm zweiten Post hauen hin, supi!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Morpheus ()

    • Cool freut mich. Meistens habe ich da immer so blöde Fehler drinne :)
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • Ja das "x1" das in deinen Formeln stand musste ich auch weglassen

      edit: Will jetzt nicht extra einen neuen Thread dazu beginnen. Kann mir mal jemand bei Gelegenheit die Funktionen ln und lerp, in einer Sprache für Viertklässler erklären?

      Ich verstehs nämlich nicht aber mein Bauchgefühl sagt mir, dass ich das für mein Projekt wissen muss.

    • lerp liefert eine lineare Intra-/Extrapolation, sprich:
      Du gibst mit den ersten Parametern an, durch welche Punkte eine Gerade an der Stelle X=0 und X=1 durchläuft.
      Anhand dieser beider Punkte ist die Gerade zweifelsfrei festgelegt, und du kannst nun mittels des dritten Parameters zweifelsfrei feststellen y-Wert die Gerade an einer beliebigen Stelle hätte.
      Simples Beispiel lerp(0,1,5) liefert dir den Wert 5 Zurück, da eine Gerade die durch (0,0) und (1,1) läuft auch durch (5,5) läuft.
      lerp(1,2,5) liefert eine 6 zurück - die Gerade hat die selbe Steigung wie die erste, aber einen anderen Nulldurchgang. Siehe dazu auch die Normalform der Geraden: y=m*x+c, m und c werden bei lerp anhand der beiden vorgegebenen Punkte berechnet (intern).
      lerp (1,3,5) gibt dann eine 11 zurück, da die Steigung hier zwei ist.

      Klar soweit?

      Wozu man das braucht? Z.B. wenn man ein Netzwerkspiel hat und der Computer ermitteln soll wie sich ein Spieler zwischen zwei empfangenen Datenpaketen weiterbewegt. Dafür ermittelt man die letzten beiden bekannten Positionen und die vergangene Zeit zwischen diesen Positionen und setzt sie in Lerp ein, wobei der dritte parameter in Vielfachen der vergangenen Zeit iengesetzt wird. so erhält man eine flüssige Bewegung. Natürlich hat das seine Grenzen, für Kurven statt Geraden benötigt man zB eine Bezier-Interpolation.

      Ln ist der natürliche Logarithmus. Das ist eine Verhältniszahl, mit der man eine andere Zahl potenzieren muss, um eine vorgegebene Zahl zu erhalten.
      Praktisch gesehen macht der Logarithmus es möglich ein Breites Spektrum an werten auf einer kleinen Skala zu erfassen, da die Werte nicht gleichförmig ansteigen (also Linear) sondern höhere Potenzen immer schwächer eingerechnet werden.
      Typisch für logarithmische Skalen sind zB Lautstärkeregler, wo (vereinfacht gesprochen) bei jeder Zahl mehr aufm Knopp die Lautstärke sich verdoppelt.
      Es ist aber leichter nachzuvollziehen die Lautstärke von 4 auf 5 anzuheben anstatt von (2^4) auf (2^5), also von 16 auf 32.
      Der Logarithmus hat diverse Anwendungsgebiete, eigentlich immer da wo etwas exponentiell wächst oder kleiner wird.

      Der Logarithmus entspricht am ehesten deinem zweiten Bild im Eingangsposting.

      Hoffe ich konnte helfen.