|
@@ -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)
|