2017-03-13 4 views
-1

Ich habe Javascript für ein paar Tage gelernt. und da ich Probleme mit der Syntax und der Semantik meiner Programme habe, kann ich dieses Problem einfach lösen. Ich weiß nicht, was ist falsch damitJavaScript Funktion Abstand zwischen zwei Punkten

//2. **Distance between two points**. Create a 
//function that calculate the distance between two points 
//(every point have two coordinates: x, y). _HINT: Your function 
//Should receive four parameters_. 


    function Point(x,y,x1,y1){ 
    this.x = x; 
    this.y = y; 
    this.x1 = x1; 
    this.y1 = y1; 

    this.distanceTo = function (point) 
    { 
     var distance = Math.sqrt((Math.pow(this.x1-this.x,2))+(Math.pow(this.y1-this.y,2))) 
     return distance; 
    }; 
} 

var newPoint = new Point (10,100); 
var nextPoint = new Point (25,5); 


console.log(newPoint.distanceTo(nextPoint)); 
+3

Sie „Punkt“ übergeben als Parameter, aber Sie verwenden sie nicht innerhalb der Funktion .... –

+0

nach Ihren Anweisungen, es sieht aus wie sie nur wollen Sie eine einzige Standalone-Funktion erstellen Sie die 4 nimmt Parameter und gibt das Ergebnis zurück. Ihr "Point" -Objekt geht über diese Anforderung hinaus und benötigt nur 2 Parameter. – 4castle

+0

Sie haben auch 4 Funktionsparameter, aber übergeben nur zwei, wenn Sie die 'var newPoint = new Point (10, 100);' Es scheint, dass Sie eine Funktion namens "distance" haben möchten, im Gegensatz zu "Point" Übergeben Sie ihm die Koordinatenpaare und führen Sie dann die Berechnung durch und geben Sie den Wert für die Entfernung zurück. –

Antwort

2

Versuchen Sie stattdessen:

function Point(x,y){ 
 
    this.x = x; 
 
    this.y = y; 
 
    
 

 
    this.distanceTo = function (point) 
 
    { 
 
     var distance = Math.sqrt((Math.pow(point.x-this.x,2))+(Math.pow(point.y-this.y,2))) 
 
     return distance; 
 
    }; 
 
} 
 

 
var newPoint = new Point (10,100); 
 
var nextPoint = new Point (20,25); 
 

 
console.log(newPoint.distanceTo(nextPoint))

In Ihrer Funktion DistanceTo Sie beziehen musste auf point.x und point.y stattdessen als das sind die Punkte von Nextpoint.

Hope this half: 3

0

Sie wenden den Hinweis an der falschen Stelle. Es ist die distanceTo Funktion, die vier Parameter annehmen sollte. Angesichts der Hinweis, würde ich mich nicht mit dem Point Konstruktor kümmern (obwohl ich das Denken im Allgemeinen mag, es scheint einfach nicht zu sein, was diese Frage sucht. Gehen Sie einfach mit distanceTo(x,y,x1,y1), und ich glaube nicht, dass Sie ‚ll Probleme haben.

0

Point Konstruktor sollte nur zwei Argumente haben x und y. und distanceTo die x und y von this Punkt Ameise der andere Punkt.

function Point(x, y){ // only x and y 
 
    this.x = x; 
 
    this.y = y; 
 

 
    this.distanceTo = function (point) 
 
    { 
 
     var dx = this.x - point.x;    // delta x 
 
     var dy = this.y - point.y;    // delta y 
 
     var dist = Math.sqrt(dx * dx + dy * dy); // distance 
 
     return dist; 
 
    }; 
 
} 
 

 
var newPoint = new Point (10,100); 
 
var nextPoint = new Point (25,5); 
 

 

 
console.log(newPoint.distanceTo(nextPoint));
(die als parametter bestanden eins) verwenden sollten

Hinweis: Da alle Point Instanzen die exakt gleiche distanceTo Funktion haben, ist es besser, es auf dem Prototyp zu definieren, anstatt sie für jede Instanz neu zu definieren, die nur die Erstellungszeit erhöhen und eine Menge Ressourcen verschwenden.

Das ist besser:

function Point(x, y){ // only x and y 
 
    this.x = x; 
 
    this.y = y; 
 
} 
 

 
Point.prototype.distanceTo = function (point) 
 
{ 
 
    var dx = this.x - point.x;    // delta x 
 
    var dy = this.y - point.y;    // delta y 
 
    var dist = Math.sqrt(dx * dx + dy * dy); // distance 
 
    return dist; 
 
}; 
 

 
var newPoint = new Point (10,100); 
 
var nextPoint = new Point (25,5); 
 

 

 
console.log(newPoint.distanceTo(nextPoint));

Mehr über prototpes here!

+0

Vielen Dank, aber ich verstehe nicht ganz, wie meine 4 Parameter in meiner ganzen Funktion funktionieren. –

+0

@GerardoLeon Siehe die ** Anmerkung **, die ich hinzufüge. Ihr Code ist nicht falsch, Funktionen in Javascript werfen keinen Fehler, wenn die Parameter weniger oder mehr sind als das, was die Funktion erwartet. Ein Fehler tritt auf, wenn die Funktion die Parameter verwendet, die nicht angegeben wurden. Überschüssiger Parameter wird niemals einen Fehler ausgeben. –

0

Es gibt ein paar verschiedene Möglichkeiten, dies basierend auf Ihrem Code zu tun, aber da Ihre Funktion 4 Eingänge erwartet, ging ich mit diesem.

function Point(x,y,x1,y1){ 
     this.x = x; 
     this.y = y; 
     this.x1 = x1; 
     this.y1 = y1; 
     this.distanceTo = function() { 
      return Math.sqrt((Math.pow(this.x1-this.x,2))+(Math.pow(this.y1-this.y,2))) 
     }; 
} 

var points = new Point (10,100,25,5); 
console.log(points.distanceTo() 

);

Sie müssen auch nicht die Variable festlegen und dann zurückgeben, können Sie einfach die Gleichung zurückgeben.

0

Ihre Funktion function Point(x,y,x1,y1) vier Parameter bekommt, aber Sie erklären es mit nur von ihnen zwei. Bei der distanceTo Funktion sollten Sie sich auf point beziehen, der Parameter Ihrer aufgerufenen Funktion ist.

Es sollte so gehen; point.x gibt Ihnen den X-Wert des übergebenen Objekts.

@Edit: Meine Lösung für dieses "Problem" ist;

var Point = function (x,y) { 
    this.x = x; 
    this.y = y; 

    this.distanceTo = function (point) { 
    let calculations = Math.sqrt((Math.pow(point.x-this.x,2))+(Math.pow(point.y-this.y,2))); 

    return calculations; 
    } 
} 

var firstPoint = new Point(0,0); 
var secPoint = new Point(2,2); 

console.log(firstPoint.distanceTo(secPoint)); 
Verwandte Themen