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

So bestimmen Sie, ob drei Koordinaten kollinear sind

PHPz
Freigeben: 2024-02-06 08:12:03
nach vorne
439 Leute haben es durchsucht

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; 
  }
Nach dem Login kopieren

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)
Nach dem Login kopieren

So sollte der Code sein,

if(result1==result2){
      isCollenear = true;
  }
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage