As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                                6年前关闭。
            
                    
我确信我的问题是一个非常普通的问题,可能是一个纯Java问题。但是,我一直在尝试寻找一种方法来使用相同的逻辑来识别三个坐标是否共线,这似乎不适用于以“点”为输入的示例。
可以采用两种方法
1.找到形成三个坐标/点的三角形区域。如果它们在同一行上;面积的值必须为零。
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 ....等

期待您的投入。

感谢和问候

最佳答案

我不是在检查区号,而是要检查三个点是否共线。那么公式是:

点(x1,y1),(x2,y2),(x3,y3)。

它应该是共线性的,

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


所以代码应该是

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

07-28 14:00