【问题标题】:Find whether point is inside a triangle (2D)查找点是否在三角形内(2D)
【发布时间】:2012-09-16 23:32:36
【问题描述】:

我正在编写 Quick Hull 算法,其中包括检查一个点是否位于三角形内。为此,我创建了以下两个函数,如果点在内部,则返回 true,否则返回 false。

但是,结果出乎意料,因为有些点分类正确,有些点分类不正确,我无法弄清楚问题所在。有人可以帮我验证我写的代码是否正确。方法是我使用向量来确定一个点是否与三角形每条边的顶点位于同一侧。 代码是:

public boolean ptInside(Point first, Point last, Point mx, Point cur) {
        boolean b1 = pointInside(first, last, mx, cur);
        boolean b2 = pointInside(last, mx, first, cur);
        boolean b3 = pointInside(first, mx, last, cur);
        return b1 && b2 && b3;

    }

    public boolean pointInside(Point first, Point last, Point mx, Point cur) {
        int x1 = last.xCo - first.xCo;
        int y1 = last.yCo - first.yCo;
        int x2 = mx.xCo - first.xCo;
        int y2 = mx.yCo - first.yCo;
        int x3 = cur.xCo - first.xCo;
        int y3 = cur.yCo - first.yCo;
        int cross1 = x1 * y2 - x2 * y1;
        int cross2 = x1 * y3 - x3 * y1;
        if (cross1 * cross2 > 0)
            return true;
        else
            return false;

    }

【问题讨论】:

  • 1.编写测试(尤其是在边界附近) 2. 确保它们通过。

标签: java geometry computational-geometry convex-hull


【解决方案1】:

您计算 b3 的点数排序不正确。您需要保持 (first, last, mx) 的循环顺序。否则你就颠倒了计​​算的意义。

【讨论】:

    【解决方案2】:

    我会简单地创建一个多边形,并使用它的contains(Point) 方法。为什么要重新发明轮子?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      相关资源
      最近更新 更多