Mathemathik in Javascript

  • Ich versuche zur Zeit eine einfache Formel in Javascript mithifle der sqrt() Funktion niederzuschreiben. Es geht dabei darum, den Abstand zweier Punkte zu berechnen. Ich stoße zum einem dabei auf das Problem, dass das Ergenbnis "NaN" (Not a Number) ist, oder undefined, je nachdem, wo ich das ganze platziere.



    Hier zeichne ich erst Linien und will dann die Länge der Linien bestimmen. (d) ist, wenn ich es außerhalb der Schleife platziere "NaN", und innerhalb der Schleife ist es eine nicht passende Zahl. Ich habe im Matheunterricht geschlafen und versuche nun nachzuholen, was ich verpennt habe.


    Ich hoffe, man kann mir helfen.


    PS: Das sind die Zahlen aus "theWay":

    1. 680
    2. 0
    3. 694
    4. 224
    5. 580
    6. 237
    7. 577
    8. 105
  • Hallo DER,


    geht es Dir nur um die Ermittlung des Abstands von zwei Punkten oder auch um grafische Darstellungen (da Du im Skript zeichnen lässt)?


    Wenn es um den Abstand von 2 Punkten nach dem Satz des Pythagoras geht, ist z.B. folgende Funktion hilfreich:


    function abstand(x1,y1,x2,y2)
    {

    alert(Math.sqrt(Math.pow((x2-x1),2)+Math.pow((y2-y1),2)));

    }


    Die Inputvariablen x1,y1, x2, y2der Funktion sind die Koordinaten der Punkte.

    Dabei potenzierst Du mit Math.pow mit 2 (quasi "hoch 2").


    Ich habe leider nicht verstanden, wie Du an die Koordinaten kommst (theway). Alternativ ist evtl. auch eine Seite mit einem entsprechenden Formular für die Koordinaten denkbar.


    Viele Grüße

  • Ich weiß nicht, ob dein Objekt so vorgegeben ist, aber in meinen Augen ist es ungünstig angelegt und erschwert die Programmierung und das Verständnis. Ich würde es so machen:

    Code
    var theWay = [
        {x: 680, y: 0},
        {x: 694, y: 224},
        {x: 580, y: 237},
        {x: 577, y: 105}
    ];

    Dann vereinfacht sich die Schleife zu:

    Code
    for (var i = 0; i < (theWay.length - 1); i++) {
        var start = theWay[i];
        var end = theWay[i + 1];
                
        ctx.beginPath();
        ctx.moveTo(start.x, start.y);
        ctx.lineTo(end.x, end.y);
        ctx.stroke();
    }
  • Sempervivum Wow, ich wusste, dass es noch deutlich einfacher gehen würde. Genau dafür hat man ja die Experten, die einen zeigen können, wie es besser geht.


    Nun will ich den Winkel der Striche berechnen, wozu ich auch vorher die Länge der Striche berechnen wollte. Doch hier komme ich irgendwie wieder nicht weiter. Meine berechnungen geben falsche Werte aus und es gibt bei Kommazahlen auch noch Probleme mit der Animation.


    Eine andere Schleife soll nun den Winkel berechnen:

    Ausgegeben wird eine falsche Zahl, welche nicht dem richtigem Winkel entspricht.


    Zusätzlich gibt es nun bei mir ein Problem mit der Animation der Rechtecke:

    Wenn "vx" Kommazahlen nutzt, hinterlässt das Rechteck spuren auf dem Canvas.


    Kannst Du mir da weiterhelfen?

  • Was den Winkel betrifft, so scheint es mir einfacher zu sein, auf Tangens und Arcus-Tangens zu setzen.

    Was die Animation betrifft, so würde ich auch hier empfehlen, eine Bibliothek einzusetzen statt immer von Neuem das Rad neu zu erfinden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!