找到三角形上的点

时间:2017-02-27 15:33:18

标签: java math

我有三个三角形的顶点,我试图找到位于三角形内侧和侧面的所有整数点。我已经尝试了很多方法,他们都成功找到了内部点,但未能找到三角形两侧的点。目前我正在使用重心坐标:

      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)不正确。

有人能帮助我吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用您需要的代码来查找位置是否在三角形内。然后对于另一部分,如果一个点是否在线上......

我会这样做..

通过一次计算2个顶点之间的距离来检查。 假设我们有顶点a,b和c。点p。

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

这可以通过衡量a -> pp -> 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);
}