You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:58:20