Home > Backend Development > Golang > How to determine whether three coordinates are collinear

How to determine whether three coordinates are collinear

PHPz
Release: 2024-02-06 08:12:03
forward
444 people have browsed it

How to determine whether three coordinates are collinear

Question content

I'm sure my question is a very general one, probably a pure java question. However, I've been trying to find a way to identify if three coordinates are collinear, using the same logic and found that it doesn't seem to work for the example with "point" as input. Two methods can be used 1. Find the area of ​​the triangle forming three coordinates/points. If they are on the same line; the area value must be zero. 2. Divide the line connecting these coordinates into two parts and find their respective slopes. If they are on the same line, the slopes will be the same.

Here's what I'm trying.

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; 
  }
Copy after login

In both cases, using coordinates as input; even for similarly collinear cases, I end up with values ​​for the area, such as 4, etc. For cases that are clearly not collinear; I end up with the same slope value.

Is there a way to get an explicit notifier for collinearity using any construct? Am I doing it right? The coordinate sample values ​​I pass to the method are Coefficient endPointOne = -26.666666666666686, 32.38095238095238 ....etc

Looking forward to your opinions.

Thanks and greetings


Correct answer


I am not checking the area code, but checking whether the three points are collinear. Then the formula is:

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

It should be collinear if and only if,

(y2-y1)      (y3-y2)
 -------  =   -------
 (x2-x1)      (x3-x2)
Copy after login

So the code should be,

if(result1==result2){
      isCollenear = true;
  }
Copy after login

The above is the detailed content of How to determine whether three coordinates are collinear. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template