Java 查找点是否位于三角形内(二维)
我正在编写快速外壳算法,其中包括检查一个点是否位于三角形内。为此,我创建了以下两个函数,如果点在内部则返回true,否则返回false 然而,结果是出乎意料的,因为有些点分类正确,有些点分类错误,我无法找出问题所在。有人能帮我验证一下我写的代码是否正确吗。方法是,我使用向量来确定一个点是否与三角形每条边的顶点位于同一侧。 代码是: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
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。确保他们通过。