我想知道以下算法检查一个点是否在矩形内是否有效。 我使用自己的直觉(没有强大的触发/数学基础来支持它)开发它,所以我很乐意听到有更多经验的人。
上下文
假设:
图表链接: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;
}
问题:这是正确的吗?
答案 0 :(得分:3)
简短回答:不:P(不要贬低它)
长答案:交叉您提到的四个圆圈中的区域(相对顶点之间的最大距离)不会产生矩形。 由于我几何形状有点生锈,我无法给出完整的数学解释(时间约束我的部分),但是给你一些程序的伪代码与你问的约束(没有花哨的公式),对于wikipeida的任何矩形都有效或者几何书可以填补空白。
检查您的点是否位于边框because those generate another type of ecuation/restriction的“右侧”,只有矩形内的点满足四个限制,如图所示连接。
如果我忽略了一些可以完成此任务的java.geom命令,我很抱歉
我希望这对你的努力有所帮助
答案 1 :(得分:0)
你可以尝试这个。让我们把我们的点命名为A.绘制A和矩形的每个点之间的一条线。然后你得到4个不同的三角形。计算三角形所采用的区域(使用Heron' s公式)并将其与矩形区域进行比较。如果区域相同,则您的点位于矩形内。 干杯