我确信我的问题是一个非常通用的问题,可能是一个纯 Java 问题。但是,我一直在尝试找到一种方法来确定三个坐标是否共线,使用相同的查找逻辑似乎不适用于将“点”作为输入的示例。两种方法可以是 1. 找到形成三个坐标/点的三角形面积。如果他们在同一行;area 的值必须为零。2. 将连接这些坐标的线一分为二,并找出各自的斜率。如果它们在同一条线上,则斜率将相同。
以下是我正在尝试的方法。
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;
}
在这两种情况下,同时使用坐标作为输入;即使对于同时共线的情况,我最终也会得到该区域的 4 等值。对于明显不共线的情况;我最终得到了相同的斜率值。
有没有办法可以使用任何构造获得明确的共线性通知?我的方法正确吗?我传递给该方法的坐标的样本值为 Coordinate endPointOne = -26.666666666666686, 32.38095238095238 .... 等
期待您的投入。
感谢和问候