Sie haben zwei Möglichkeiten: Sie können die Winkel zwischen V1
und V
und V2
und V
mit der AngleBetween
Funktion berechnen kann :
var angle1 = Vector.AngleBetween(V1,V);
var angle2 = Vector.AngleBetween(V2,V);
if (angle1 < angle2) {
//V1 is closer to V
}else{
//V2 is closer to V
}
oder Sie könnten y
Werte ihre Ihre Vektoren normalisieren und vergleichen, auch danach:
V1.Normalize();
V2.Normalize();
if(Math.Abs(V1.Y) < Math.Abs(V2.Y)){
//V1 is closer
}else{
//V2 is closer
}
würde ich die erste Methode bevorzugen, da die Normalize()
Funktion der ursprünglichen Vector tatsächlich ändert, so dass Sie eine Kopie erstellen müssten, wenn man sie danach verwenden wollte. Sie können auch die erste Version verwenden, um sie mit einem anderen Vektor V
zu vergleichen, ohne den Code anpassen zu müssen.
Bearbeiten: Eigentlich die erste Version wählt nur den Vektor mit dem kleinsten Winkel zum V
Vektor und nicht auf der X-Achse. Also, wenn Sie den Vektor, anstatt nur auf die Achse vergleichen wollen, sollten Sie die Winkelberechnung mit Kopien von V1
und V2
mit absoluten x
und y
Werten tun:
var ref1 = new System.Windows.Vector(Math.Abs(V1.X),Math.Abs(V1.Y));
var ref2 = new System.Windows.Vector(Math.Abs(V2.X),Math.Abs(V2.Y));
var angle1 = Vector.AngleBetween(ref1,V);
var angle2 = Vector.AngleBetween(ref2,V);
if (angle1 < angle2) {
//V1 is closer to V
}else{
//V2 is closer to V
}
es Sehen aus wie diese, könnte das Normierungsverfahren die bessere Wahl sein. (Rufen Sie jedoch Normalize()
auf Kopien an.)
Eigentlich, wenn Sie wissen müssen, welcher Vektor näher an der X-Achse (und nur X) ist, können Sie die Werte der X-Koordinaten dieser Vektoren verwenden. Diese 'X'-Koordinaten sind die Längen der Projektion beider Vectoren an der OX-Achse, die eine kürzere hat den größeren Winkel, die längere Projektion bedeutet einen schärferen Winkel. – Blablablaster