我想知道以下检查点是否在矩形内的算法是否有效。我用自己的直觉开发了它(没有强大的三角/数学基础来支持它),所以我很想听听在这件事上有更多经验的人的意见。
语境:
- 矩形由 4 个点定义。它可以旋转。
- 坐标总是正的。
- 根据定义,如果点与矩形相交,则认为该点位于矩形内部。
假设:
- 使用点和矩形顶点之间的距离(下图)。
- 最大可能的总距离是当点位于一个顶点时(第二张图)。
- 如果该点刚好在矩形之外,则距离会更大(第三张图)。
图表链接:http: //i45.tinypic.com/id6o35.png
算法(Java):
static boolean pointInsideRectangle(Point[] rect, Point point) {
double maxDistance = distance(rect[0], rect[1]);
maxDistance += distance(rect[0], rect[2]);
maxDistance += distance(rect[0], rect[3]);
double distance = 0;
for (Point rectPoint : rect) {
distance += distance(rectPoint, point);
if (distance > maxDistance) return false;
}
return true;
}
问题:这是正确的吗?