Java 查找点是否位于三角形内(二维)

Java 查找点是否位于三角形内(二维),java,geometry,computational-geometry,convex-hull,Java,Geometry,Computational Geometry,Convex Hull,我正在编写快速外壳算法,其中包括检查一个点是否位于三角形内。为此,我创建了以下两个函数,如果点在内部则返回true,否则返回false 然而,结果是出乎意料的,因为有些点分类正确,有些点分类错误,我无法找出问题所在。有人能帮我验证一下我写的代码是否正确吗。方法是,我使用向量来确定一个点是否与三角形每条边的顶点位于同一侧。 代码是: public boolean ptInside(Point first, Point last, Point mx, Point cur) { boo

我正在编写快速外壳算法,其中包括检查一个点是否位于三角形内。为此,我创建了以下两个函数,如果点在内部则返回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;

    }

我只需要创建一个多边形,并使用它的方法。为什么要重新发明轮子?

我只需要创建一个多边形,并使用它的方法。为什么要重新发明轮子?

计算b3的点数顺序不正确。您需要保持(第一个、最后一个、mx)的循环顺序。否则,您就颠倒了计算的意义。

您对b3计算点的排序是不正确的。您需要保持(第一个、最后一个、mx)的循环顺序。否则,您就颠倒了计算的意义。

1。编写测试(特别是在边界附近)2。确保他们通过。编写测试(特别是在边界附近)2。确保他们通过。