如何使用Python统计线段构成的独立闭合区域数量?
闭合区域统计Python程序完善需求
我们需要编写Python程序实现以下逻辑:给定线段坐标数据(coordinates),每个元组代表一条由两点构成的线段,统计符合规则的闭合区域数量。
规则与示例
- 示例1:坐标数据为
coordinates = [(0.0, 0.0, 50.0, 0.0), (50.0, 0.0, 50.0, 50.0), (50.0, 50.0, 0.0, 50.0), (0.0, 50.0, 0.0, 0.0)]
此时构成一个正方形,需输出闭合区域数量1。
- 示例2:坐标数据新增一条线段后为
coordinates = [(0.0, 0.0, 50.0, 0.0), (50.0, 0.0, 50.0, 50.0), (50.0, 50.0, 0.0, 50.0), (0.0, 50.0, 0.0, 0.0), (0.0, 50.0, 50.0, 0.0)]
此时原正方形被分割,存在3个闭合图形,但需输出2——因为包含内部闭合区域的外层不计入,仅统计独立的闭合对象。
现有代码问题
现有代码仅能识别单个闭合区域,需要完善以实现正确统计,代码如下:
def find_connected_lines(coordinates): connected_lines = [] lines_dict = {} for line in coordinates: for i in range(0, len(line), 2): point = (line[i], line[i + 1]) if point not in lines_dict: lines_dict[point] = [] lines_dict[point].append(line) def dfs(point): if point not in visited: visited.add(point) for line in lines_dict[point]: for i in range(0, len(line), 2): next_point = (line[i], line[i + 1]) if next_point != point: dfs(next_point) for point in lines_dict: if len(lines_dict[point]) == 2: connected_lines.append(lines_dict[point][0]) visited = set() dfs(point) return connected_lines def count_closed_areas(coordinates): connected_lines = find_connected_lines(coordinates) count = 0 while connected_lines: line = connected_lines.pop() count += 1 for other_line in list(connected_lines): if set(line).intersection(set(other_line)): connected_lines.remove(other_line) return count coordinates1 = [(0.0, 50.0, 0.0, 0.0), (0.0, 50.0, 50.0, 50.0), (0.0, 0.0, 50.0, 0.0), (50.0, 0.0, 50.0, 50.0)] print("Number of enclosed areas:", count_closed_areas(coordinates1))
内容的提问来源于stack exchange,提问作者Bobby Lith
相关产品推荐
相关产品推荐

