11 Stimmen

Wie kann man die Koordinaten einer Pfeilspitze anhand des Pfeils berechnen?

Ich habe eine Linie, die auf zwei mir bekannten (x,y) Koordinaten basiert. Diese Linie hat einen Anfangs- und einen Endpunkt. Jetzt möchte ich eine Pfeilspitze am Endpunkt der Linie hinzufügen.

Ich weiß, dass der Pfeil ein gleichseitiges Dreieck ist und daher jeder Winkel 60 Grad hat. Außerdem kenne ich die Länge einer Seite, die 20 beträgt. Ich kenne auch keine Kante des Dreiecks (das ist der Endpunkt der Linie).

Wie kann ich die beiden anderen Punkte des Dreiecks berechnen? Ich weiß, dass ich etwas Trigonometrie verwenden sollte, aber wie?

P.s. Der Endpunkt der Linie sollte die Spitze der Pfeilspitze sein.

1voto

Sehael Punkte 3638

Für alle, die es interessiert, @TomP fragte nach einer js-Version, so hier ist eine javascript-Version, die ich gemacht. Sie basiert auf den Antworten von @Patratacus und @Marcelo Cantos. Javascript unterstützt keine Operatorüberladung, daher ist es nicht so sauber wie C++ oder andere Sprachen. Sie können gerne Verbesserungen vorschlagen.

Ich verwende Class.js, um Klassen zu erstellen.

Vector = Class.extend({
NAME: "Vector",

init: function(x, y)
{
    this.x = x;
    this.y = y;
},

subtract: function(v1)
{
    return new Vector(this.x - v1.x, this.y - v1.y);
},

add: function(v1)
{
    return new Vector(this.x + v1.x, this.y + v1.y);
},

divide: function(number)
{
    return new Vector(this.x / number, this.y / number);
},

multiply: function(number)
{
    return new Vector(this.x * number, this.y * number);
},

length: function()
{
    var distance;
    distance = (this.x * this.x) + (this.y * this.y);
    return Math.sqrt(distance);
}
});

Und dann eine Funktion, die die Logik ausführt:

var getArrowhead = function(A, B)
{
    var h = 10 * Math.sqrt(3);
    var w = 5;
    var v1 = B.subtract(A);
    var length = v1.length();
    var U = v1.divide(length);
    var V = new Vector(-U.y, U.x);
    var r1 = B.subtract(U.multiply(h)).add(V.multiply(w));
    var r2 = B.subtract(U.multiply(h)).subtract(V.multiply(w));

    return [r1,r2];
}

Und rufen Sie die Funktion wie folgt auf:

var A = new Vector(start.x,start.y);
var B = new Vector(end.x,end.y);    
var vec = getArrowhead(A,B);

console.log(vec[0]);
console.log(vec[1]);

Ich weiß, dass der OP nicht nach einer bestimmten Sprache gefragt hat, aber ich bin auf der Suche nach einer JS-Implementierung darauf gestoßen, also dachte ich, ich würde das Ergebnis posten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X