Heim  >  Artikel  >  Backend-Entwicklung  >  So bestimmen Sie, ob drei Koordinaten kollinear sind

So bestimmen Sie, ob drei Koordinaten kollinear sind

PHPz
PHPznach vorne
2024-02-06 08:12:03396Durchsuche

So bestimmen Sie, ob drei Koordinaten kollinear sind

Frageninhalt

Ich bin mir sicher, dass meine Frage sehr allgemein ist, wahrscheinlich eine reine Java-Frage. Ich habe jedoch versucht, mithilfe derselben Logik herauszufinden, ob drei Koordinaten kollinear sind, und habe festgestellt, dass dies für das Beispiel mit „Punkt“ als Eingabe nicht zu funktionieren scheint. Es können zwei Methoden verwendet werden 1. Finden Sie die Fläche des Dreiecks, das drei Koordinaten/Punkte bildet. Wenn sie auf derselben Linie liegen, muss der Flächenwert Null sein. 2. Teilen Sie die Linie, die diese Koordinaten verbindet, in zwei Teile und ermitteln Sie deren jeweilige Steigung. Wenn sie auf derselben Linie liegen, sind die Steigungen gleich.

Hier ist, was ich versuche.

private
boolean collinearCheck( Coordinate endPointOne , Coordinate intersection,Coordinate  endPointTwo ){ 
boolean isCollenear = false; 

//Area of triangle approach
double area = (Math.round(endPointOne.x )* (Math.round(intersection.y) - Math.round  (endPointTwo.y)) + Math.round(intersection.x )* (Math.round(endPointTwo.y) - Math.round (endPointOne.y)) + 
Math.round(endPointTwo.x) * (Math.round(endPointOne.y) - Math.round(intersection.y)));
if((endPointOne.x * (intersection.y - endPointTwo.y) + intersection.x *  (endPointTwo.y - endPointOne.y) + 
endPointTwo.x * (endPointOne.y - intersection.y))<= 0) if(Math.round(area) <= 0)
{
isCollenear = true;
} 

 // Slope Approach
  double numeratorOne = Math.round(intersection.y) - Math.round(endPointOne.y);
  double denominatorOne = Math.round(intersection.x) - Math.round(endPointOne.x);
  double numeratorTwo = Math.round(endPointTwo.y) - Math.round(intersection.y);
  double denominatorTwo = Math.round(endPointTwo.x) - Math.round(intersection.x);
  double result1 = Math.round(numeratorOne/denominatorOne);
  double result2 = Math.round(numeratorTwo/denominatorTwo);
  if(result1== 0 && result2==0){
   isCollenear = true;
  }
 return isCollenear; 
  }

Wenn ich in beiden Fällen Koordinaten als Eingabe verwende, erhalte ich selbst für ähnlich kollineare Fälle Werte für die Fläche, wie 4 usw. Für Fälle, die eindeutig nicht kollinear sind, erhalte ich den gleichen Steigungswert.

Gibt es eine Möglichkeit, mithilfe eines beliebigen Konstrukts einen expliziten Melder für Kollinearität zu erhalten? Mache ich das richtig? Die Koordinatenbeispielwerte, die ich an die Methode übergebe, sind Coefficient endPointOne = -26.66666666666686, 32.38095238095238 ....usw.

Ich freue mich auf eure Meinungen.

Danke und Grüße


Richtige Antwort


Ich überprüfe nicht die Vorwahl, sondern ob die drei Punkte kollinear sind. Dann lautet die Formel:

Punkte (x1,y1), (x2,y2), (x3,y3).

Es sollte genau dann kollinear sein, wenn

(y2-y1)      (y3-y2)
 -------  =   -------
 (x2-x1)      (x3-x2)

So sollte der Code sein,

if(result1==result2){
      isCollenear = true;
  }

Das obige ist der detaillierte Inhalt vonSo bestimmen Sie, ob drei Koordinaten kollinear sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen