求欧几里得坐标系矩形计数问题的边缘测试用例
非零面积矩形统计代码的边缘测试场景
给定欧几里得坐标系中的点列表,统计其中任意4个点可构成的不同非零面积矩形(无需轴对齐)的数量。现有实现代码如下,以下是可验证代码的边缘测试场景:
def countRectangles(intPoints): ans = 0 def getDistance(point1, point2): x1, y1 = point1[0], point1[1] x2, y2 = point2[0], point2[1] return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) def getMidPoint(point1, point2): x1, y1 = point1[0], point1[1] x2, y2 = point2[0], point2[1] midPoint = ((x1 + x2) / 2, (y1 + y2) / 2) return midPoint def intToFloatList(points): for i, point in enumerate(points): curX, curY = point[0], point[1] points[i] = (float(curX), float(curY)) return points distanceMidPoint_PointsMap = {} points = intToFloatList(intPoints) for i, point in enumerate(points): for j in range(i+1, len(points)): nextPoint = points[j] curSqrdDistance = getDistance(point, nextPoint) curMidPoint = getMidPoint(point, nextPoint) key = (curSqrdDistance, curMidPoint) if key not in distanceMidPoint_PointsMap: distanceMidPoint_PointsMap[key] = set() distanceMidPoint_PointsMap[key].add((point, nextPoint)) for key, val in distanceMidPoint_PointsMap.items(): if len(val) > 1: ans += len(val) return ans // 2
边缘测试场景
点数量不足4个的情况
- 测试用例:
[(0,0), (1,1), (2,2)](3个点) - 预期结果:返回0,无法组成4点矩形
- 测试用例:
所有点共线的情况
- 测试用例:
[(0,0), (1,0), (2,0), (3,0), (4,0)](5个共线点) - 预期结果:返回0,共线点无法构成非零面积矩形
- 测试用例:
包含重复点的情况
- 测试用例1:
[(0,0), (0,0), (1,1), (1,1)](两对重复点) - 预期结果1:返回0,重复点无法组成非零面积矩形
- 测试用例2:
[(0,0), (0,0), (0,1), (1,0), (1,1)](含一个重复点的5个点) - 预期结果2:返回1,仅能组成唯一的轴对齐矩形
- 测试用例1:
多条线段共享同一中点与长度的情况
- 测试用例:
[(0,0), (2,2), (0,2), (2,0), (1,3), (1,-1)](3条线段共享中点(1,1)且平方距离均为8) - 预期结果:返回3,三条线段两两组合可形成3个不同矩形
- 测试用例:
顶点为整数但中点为小数的非轴对齐矩形
- 测试用例:
[(0,0), (3,4), (1,5), (2,-1)](对角线中点为(1.5,2),平方距离均为25) - 预期结果:返回1,该4点可构成一个非轴对齐矩形
- 测试用例:
大量散点仅含少量有效矩形的情况
- 测试用例:96个随机散点 +
[(0,0), (0,2), (2,2), (2,0)](仅这4点能构成矩形) - 预期结果:返回1
- 测试用例:96个随机散点 +
共中点但距离不同的线段(无法构成矩形)
- 测试用例:
[(0,0), (2,2), (0,3), (2,-1)](两条线段中点均为(1,1),但平方距离分别为8和10) - 预期结果:返回0,不满足矩形对角线的距离相等条件
- 测试用例:
含负数坐标的非轴对齐矩形
- 测试用例:
[(-1,-1), (-3,2), (0,4), (2,1)](对角线中点为(-0.5,1.5),平方距离均为26) - 预期结果:返回1,该4点可构成一个非轴对齐矩形
- 测试用例:
多个重叠矩形的情况
- 测试用例:
[(0,0), (0,2), (2,2), (2,0), (0,1), (1,2), (2,1), (1,0)](两个重叠的矩形) - 预期结果:返回2,两个不同的4点组合各构成一个矩形
- 测试用例:
内容的提问来源于stack exchange,提问作者confused
相关产品推荐
相关产品推荐

