判断一个点是否在凸四边形内

来自:https://blog.csdn.net/san_junipero/article/details/79172260

四边形内的点都在顺时针(逆时针)向量的同一边,即夹角小于90o90o,向量积同向 (这里用的是叉乘积)。

private boolean isPointInRect(int x, int y) {
final Point A = mLBPoint;
final Point B = mLTPoint;
final Point C = mRTPoint;
final Point D = mRBPoint;
final int a = (B.x - A.x)*(y - A.y) - (B.y - A.y)*(x - A.x);
final int b = (C.x - B.x)*(y - B.y) - (C.y - B.y)*(x - B.x);
final int c = (D.x - C.x)*(y - C.y) - (D.y - C.y)*(x - C.x);
final int d = (A.x - D.x)*(y - D.y) - (A.y - D.y)*(x - D.x);
if((a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0)) {
return true;
}

// AB X AP = (b.x - a.x, b.y - a.y) x (p.x - a.x, p.y - a.y) = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);
// BC X BP = (c.x - b.x, c.y - b.y) x (p.x - b.x, p.y - b.y) = (c.x - b.x) * (p.y - b.y) - (c.y - b.y) * (p.x - b.x);
return false;
}

原文地址:https://www.cnblogs.com/YouXiangLiThon/p/10783790.html