通过面积法,判断点P是否在四边形(A,B,C,D)内。如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A),反之不在四边形内。
此处我将判断方法定义成了静态方法,方便其他类访问,代码如下:
public IsInQuadrangle() {
super();
}
/**
* 判断p是否在abcd组成的四边形内
* @param a
* @param b
* @param c
* @param d
* @param p
* @return 如果p在四边形内返回true,否则返回false.
*/
public static boolean pInQuadrangle(Point a, Point b, Point c, Point d,
Point p) {
double dTriangle = triangleArea(a, b, p) + triangleArea(b, c, p)
+ triangleArea(c, d, p) + triangleArea(d, a, p);
double dQuadrangle = triangleArea(a, b, c) + triangleArea(c, d, a);
return dTriangle == dQuadrangle;
}
// 返回三个点组成三角形的面积
private static double triangleArea(Point a, Point b, Point c) {
double result = Math.abs((a.x * b.y + b.x * c.y + c.x * a.y - b.x * a.y
- c.x * b.y - a.x * c.y) / 2.0D);
return result;
}
}