| 
														
															@@ -1,3 +1,4 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import sys 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 从文件读取一组节点 
														 | 
														
														 | 
														
															 # 从文件读取一组节点 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 nodes = [] 
														 | 
														
														 | 
														
															 nodes = [] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 with open(r"C:\TSP\CDR_TO_TSP", "r") as file: 
														 | 
														
														 | 
														
															 with open(r"C:\TSP\CDR_TO_TSP", "r") as file: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -21,6 +22,7 @@ def sort_and_remove_duplicates(nodes): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return unique_nodes 
														 | 
														
														 | 
														
															     return unique_nodes 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 对节点进行排序和删除重复,写回文件 
														 | 
														
														 | 
														
															 # 对节点进行排序和删除重复,写回文件 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 unique_nodes = sort_and_remove_duplicates(nodes) 
														 | 
														
														 | 
														
															 unique_nodes = sort_and_remove_duplicates(nodes) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 total = len(unique_nodes) 
														 | 
														
														 | 
														
															 total = len(unique_nodes) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -62,18 +64,35 @@ near_boundary_points = sorted(sorted_tuples, key=lambda x: x[0]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 输出排序后的元组列表 
														 | 
														
														 | 
														
															 # 输出排序后的元组列表 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # print(near_boundary_points) 
														 | 
														
														 | 
														
															 # print(near_boundary_points) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# 统计 x = x_min 的坐标点个数, 也就是求边界框左边 节点个数 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# 移除相邻点 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def remove_adjacent(nodes): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    threshold = 0.5  # 设定阈值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    for i, node in enumerate(nodes): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        remove_indices = [] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        for j, other_node in enumerate(nodes[i+1:]): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            distance = ((node[0]-other_node[0])**2 + (node[1]-other_node[1])**2)**0.5 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if distance < threshold: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                remove_indices.append(i+j+1)  # 记录需要移除的点的索引 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        for index in sorted(remove_indices, reverse=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            del nodes[index]  # 移除邻近的点 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    return nodes 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+near_boundary_points = remove_adjacent(near_boundary_points) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# 统计 x_min和y_max邻近的坐标点个数, 也就是求边界框左边 节点个数 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 left_points = [] 
														 | 
														
														 | 
														
															 left_points = [] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 top_points = [] 
														 | 
														
														 | 
														
															 top_points = [] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 for x, y in near_boundary_points: 
														 | 
														
														 | 
														
															 for x, y in near_boundary_points: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if x == x_min: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if abs(x - x_min) <= 0.5: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         left_points.append((x, y)) 
														 | 
														
														 | 
														
															         left_points.append((x, y)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if y == y_max: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if abs(y - y_max) <= 0.5: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         top_points.append((x, y)) 
														 | 
														
														 | 
														
															         top_points.append((x, y)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 left_points.reverse() 
														 | 
														
														 | 
														
															 left_points.reverse() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 print(left_points) 
														 | 
														
														 | 
														
															 print(left_points) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+if len(left_points) % 2 : 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    top_points.reverse()    # 控制竖线从右往左 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 print(top_points) 
														 | 
														
														 | 
														
															 print(top_points) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 把裁切线节点 写文件 TSP2.tx ,完成算法 
														 | 
														
														 | 
														
															 # 把裁切线节点 写文件 TSP2.tx ,完成算法 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -82,8 +101,11 @@ f = open(r"C:\TSP\TSP2.txt", "w") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 line = "%d %d\n" % (total, total) 
														 | 
														
														 | 
														
															 line = "%d %d\n" % (total, total) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 f.write(line) 
														 | 
														
														 | 
														
															 f.write(line) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-ext = 3  # extend 延长线  3mm 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-inverter = 1 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ext = 3  # extend 延长线, 默认值 3mm 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+if len(sys.argv) > 1: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ext = float(sys.argv[1]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+inverter = 1   # 交流频率控制 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 for x, y in left_points: 
														 | 
														
														 | 
														
															 for x, y in left_points: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if inverter == 1: 
														 | 
														
														 | 
														
															     if inverter == 1: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         line = "%f %f %f %f\n" % (x - ext, y, x_max + ext, y) 
														 | 
														
														 | 
														
															         line = "%f %f %f %f\n" % (x - ext, y, x_max + ext, y) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -94,7 +116,7 @@ for x, y in left_points: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     inverter = (inverter + 1) % 2 
														 | 
														
														 | 
														
															     inverter = (inverter + 1) % 2 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 for x, y in top_points: 
														 | 
														
														 | 
														
															 for x, y in top_points: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if inverter == 1: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if inverter == len(left_points) % 2:  # 控制竖线从下面往上 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         line = "%f %f %f %f\n" % (x, y + ext, x, y_min - ext) 
														 | 
														
														 | 
														
															         line = "%f %f %f %f\n" % (x, y + ext, x, y_min - ext) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     else: 
														 | 
														
														 | 
														
															     else: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         line = "%f %f %f %f\n" % (x, y_min - ext, x, y + ext) 
														 | 
														
														 | 
														
															         line = "%f %f %f %f\n" % (x, y_min - ext, x, y + ext) 
														 |