kostenloser Webspace werbefrei: lima-city


Parabel mit PHP zeichnen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    askarian

    Kostenloser Webspace von askarian

    askarian hat kostenlosen Webspace.

    Hallo zusammen,

    ich zerbrech mir gerade den Kopf darüber, wie ich mit PHP eine Parabel in der Scheitelpunksform zeichnen kann.

    Mir fiel bisher die Möglichkeit ein, alle x-Werte von -20 bis 20 durchzugehen, und in der Scheitelpunktsform "x" durch "\$x" ersetzten.

    Den y - Wert kann man dann ja mit eval() berechnen. Gibt es da eine bessere Methode?


    Beitrag zuletzt geändert: 25.11.2012 19:27:42 von askarian
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Es kommt darauf an, welche Änderungen Du in Betracht ziehst.
    Soll die Parabel nur nach oben und unten verschoben werden? Oder auch seitwärts?

    Wenn Du nur vertikal benötigst, sollte es eigentlich keine Probleme geben, deswegen glaube ich das eher nicht.

    Hier einmal ein Link, der vielleicht hilft:
    http://www.php.de/php-tipps-2004/10047-graphen-zeichnen.html

    Wie entstehen denn die Funktionsgleichungen?
  4. Autor dieses Themas

    askarian

    Kostenloser Webspace von askarian

    askarian hat kostenlosen Webspace.

    tobiworlds schrieb:
    Es kommt darauf an, welche Änderungen Du in Betracht ziehst.
    Soll die Parabel nur nach oben und unten verschoben werden? Oder auch seitwärts?

    Wenn Du nur vertikal benötigst, sollte es eigentlich keine Probleme geben, deswegen glaube ich das eher nicht.

    Hier einmal ein Link, der vielleicht hilft:
    http://www.php.de/php-tipps-2004/10047-graphen-zeichnen.html

    Wie entstehen denn die Funktionsgleichungen?


    Danke, aber hier war ich auch schon...

    Ich habe bisher schon
    if (!strpos($term, "\$x")) {
    		$term = str_replace("x", "\$x", $term);
    	}
    	$s = array('1(', "2(", "3(", "4(", "5(", "6(", "7(", "8(", "9(", "1x");
    	$r = array('1*(', "2*(", "3*(", "4*(", "5*(", "6*(", "7*(", "8*(", "9*(", "x");
    	$term = str_replace($s, $r, $term);

    eingefügt.

    Aber ich verzweifle am Quadrat rechnen.

    Also, dass (x-[int])² bzw. (x+[int])² zu pow(x-[int], 2) umgewandelt wird.

    €: Ich habe jetzt ziemlich getrickst:
    $term = preg_replace("|\((x\+[\d]+)\)\S|", "pow(\$1 , 2)", $term);
    	$term = preg_replace("|\(x\-[\d]+\)\S|", "pow(x-\$1, 2)", $term);
    	
    	if (!strpos($term, "\$x")) {
    		$term = str_replace("x", "\$x", $term);
    	}
    	$s = array('1(', "2(", "3(", "4(", "5(", "6(", "7(", "8(", "9(", "1x");
    	$r = array('1*(', "2*(", "3*(", "4*(", "5*(", "6*(", "7*(", "8*(", "9*(", "x");
    	$term = str_replace($s, $r, $term);
    	
    	$term = preg_replace("|([\d]+)pow|", "\$1 * pow", $term);


    Deshalb nun: Wie geht es sauberer und wie kann ich das mit eval sicherer machen?

    Beitrag zuletzt geändert: 25.11.2012 20:30:46 von askarian
  5. eval() habe ich noch nie benutzt, aber sag mir doch bitte erstmal, woher die Gleichungen kommen...
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tobiworlds schrieb:
    eval() habe ich noch nie benutzt
    Das ist auch gut so.
    eval()
    führt einen String als PHP-Code aus. Diese Funktion ist übrigens aus Sicherheitsgründen auf lima-city gesperrt.

    Wenn der TE allerdings verrät wie er auf die Gleichungen kommt lässt sich mit Sicherheit ein besserer Weg finden.

    Beitrag zuletzt geändert: 25.11.2012 21:32:27 von hackyourlife
  7. g****e

    Ich muss jetzt erstmal Fragen: Was genau willst du überhaupt machen? Du möchtest eine Parabel zeichnen. Ok. Und um den Scheitelpunkt zu ermitteln, willst du die Scheitelpunktform? Korrekt? Oder hast du die Scheitelpunktform?
    Jenachdem, wenn du von x^2 + ax + b in die entsprechende Scheitelpunktform willst, kannst du diesen String analysieren:
    $string = "ax^2 + bx + c";
    $string = str_replace( '-' , '+-' , $string );
    $subArr = explode( '+' , $string );
    if ( empty( $subArr[0] ) {
        unset( $subArr[0]);
    }
    // nun wissen wir, dass alle Teile positiv sind. Wir können nun mit der subArray analyse beginnen
    $subValues['a'] = intval( $subArr[0] );
    $subValues['b'] = intval( $subArr[1] );
    $subValues['c'] = intval( $subArr[2] );
    // nun haben wir a, b und c herausgefiltert. jetzt den Scheitelpunkt ermitteln:
    $scheitelpunktX = -1 * $subValues[ 'b' ] / $subValues[ 'a' ] / 2 ;
    // damit haben wir den Scheitelpunkt, da wir sowohl die Gleichung als auch den ScheitelpunktX wert haben:
    $points = array();
    for ( $i = $scheitelpunktX - 20; $i <= $scheitelpunktX + 20 ; $i++ ) {
        $points[ $i ] = $subValues[ 'a' ] * pow( $i , 2 ) + $subValues[ 'b' ] * $i + $subValues[ 'c' ];
    }
    // jetzt haben wir im Array $points alle nötigen Punkte um den Scheitelpunkt

    Das ist jetzt ungetestet und kann daher Fehler enthalten, bzw auch falsch sein. Dies funktioniert allerdings nur, wenn der übergebene String die obige Form hat, das heißt der eingegebene String des Users muss erst vorangepasst werden, oder anders geparsed werden. Jedoch ist dies auch nur eine Möglichkeit, die vllt hilft das Ziel zu erreichen.

    Wenn nicht würd ich bitten, ein paar mehr Infos raus zu hauen. Ich bin nicht ganz einfach vom Verständnis, geb ich zu, jedoch hoffe ich, dass meine Ergebnisse dafür das sind, was gebraucht ist.

    Liebe Grüße
  8. Autor dieses Themas

    askarian

    Kostenloser Webspace von askarian

    askarian hat kostenlosen Webspace.

    ggamee schrieb:
    Ich muss jetzt erstmal Fragen: Was genau willst du überhaupt machen? Du möchtest eine Parabel zeichnen. Ok. Und um den Scheitelpunkt zu ermitteln, willst du die Scheitelpunktform? Korrekt? Oder hast du die Scheitelpunktform?


    Ok, also nochmal im Klartext:

    Ich habe einen String der Form a(x-d)² + e.

    Daraus mache ich einen String, für die eval Funktion, indem x ducrh $x und \(x ∓ ([\d]) \)² zu pow(x ∓ $1)

    Dazu eine Frage: bräuchte man hier nicht irgendwas für binomische Formeln (1&2)?


    Danach geh ich in einer Schleife beliebig viel mal das ganze mit versch. x - Werten durch.

    Aber ich denke, dass dein Teil besser ist, weil er die einzelnen Variablen herausholt.

    Ich werd mal was damit herumexperimentieren.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!