Java 在三角形上找点

Java 在三角形上找点,java,math,Java,Math,我有一个三角形的3个顶点,我试图找到所有位于三角形内部和边上的整数点。我尝试过许多方法,它们都成功地找到了内部点,但没有找到三角形边上的点。目前我使用重心坐标: private static boolean pointInTriangle(int[] p, int[] c1, int[] c2, int[] c3){ float alpha = ((c2[1] - c3[1])*(p[0] - c3[0]) + (c3[0] - c2[0])*(p[1] - c3[1]

我有一个三角形的3个顶点,我试图找到所有位于三角形内部和边上的整数点。我尝试过许多方法,它们都成功地找到了内部点,但没有找到三角形边上的点。目前我使用重心坐标:

      private static boolean pointInTriangle(int[] p, int[] c1, int[] c2, int[] c3){

      float alpha = ((c2[1] - c3[1])*(p[0] - c3[0]) + (c3[0] - c2[0])*(p[1] - c3[1])) /
                ((c2[1] - c3[1])*(c1[0] - c3[0]) + (c3[0] - c2[0])*(c1[1] - c3[1]));
      float beta = ((c3[1] - c1[1])*(p[0] - c3[0]) + (c1[0] - c3[0])*(p[1] - c3[1])) /
               ((c2[1] - c3[1])*(c1[0] - c3[0]) + (c3[0] - c2[0])*(c1[1] - c3[1]));
      float gamma = 1.0f - alpha - beta;

      return ( (alpha>=0.0f) && (beta>=0.0f) && (gamma>=0.0f) );
例如,对于顶点(0,0),(0,10),(10,10),它确实会找到(10,8),但也会找到(11,8),这是不正确的

有人能帮我吗


提前谢谢

使用你一直需要的代码来确定一个位置是否在三角形内。那么对于另一部分,如果一个点在直线上或不在直线上

我会这样做

通过一次计算两个顶点之间的距离进行检查。 假设我们有顶点a、b和c。点p

检查p是否在a和b之间的线上

这可以通过测量
a->p
p->b
之间的距离来实现

如果这两个距离等于
a->b
的距离,那么它就在线上。如果p不在直线上,则距离会更长

以下是计算距离的方法(毕达哥兰-特奥雷姆):

重复:另一个:可能重复的可能重复的
private static double GetDistance(double x1, double y1, double x2, double y2) 
{
    double a = Math.abs(x1-x2);
    double b = Math.abs(y1-y2);

    return Math.sqrt(a * a + b * b);
}