import tkinter as tk
def is_intersect(a, b):
"""
判断两个矩形是否相交(包括边相交)。
:param a: 矩形 a,格式为 [index, x1, x2, y1, y2]
:param b: 矩形 b,格式为 [index, x1, x2, y1, y2]
:return: True 如果相交,否则 False
"""
# 提取 a 和 b 的坐标
x1_a, x2_a, y1_a, y2_a = a[1], a[2], a[3], a[4]
x1_b, x2_b, y1_b, y2_b = b[1], b[2], b[3], b[4]
# 检查 X 轴是否重叠
x_overlap = max(x1_a, x1_b) < min(x2_a, x2_b)
# 检查 Y 轴是否重叠
y_overlap = max(y1_a, y1_b) <= min(y2_a, y2_b)
# 如果 X 轴和 Y 轴都重叠,则矩形相交
return x_overlap and y_overlap
def read_data_from_file(file_path):
records = []
max_x = 0
max_y = 0
min_y = 1000000
with open(file_path, 'r') as file:
for line in file:
parts = line.split("|")[0]
parts = parts.split()
if len(parts) == 5:
try:
index, x1, x2, first_task, last_task = map(int, parts)
records.append([index, x1, x2, first_task, last_task])
if x2 > max_x:
max_x = x2
if last_task > max_y:
max_y = last_task
if first_task < min_y:
min_y = first_task
except ValueError:
print(f"Warning: Skipping invalid line - {line.strip()}")
return records, max_x, max_y, min_y
def main():
root = tk.Tk()
canvas = tk.Canvas(root, width=1920, height=1080)
canvas.pack()
file_path = '/home/wyf/3gi/test/client_code/yolo_world_v2/1.txt' # 您的文本文件路径
records, max_x, max_y, min_y = read_data_from_file(file_path)
for i in records:
for j in records:
if i == j :
continue
if is_intersect(i,j):
print(i,j)
data_width = max_x
data_height = max_y - min_y
canvas_width = 1920
canvas_height = 1080
x_ratio = canvas_width / data_width
y_ratio = canvas_height / data_height
for rect in records:
index, x1, x2, first_task, last_task = rect
canvas_x1 = x1 * x_ratio
canvas_y1 = (first_task - min_y) * y_ratio
canvas_x2 = x2 * x_ratio
canvas_y2 = (last_task - min_y) * y_ratio
canvas.create_rectangle(canvas_x1, canvas_y1, canvas_x2, canvas_y2, fill='red')
canvas.create_text(canvas_x1, canvas_y1, text=str(index), anchor=tk.NW, fill='black')
reverse_scaling = False
def on_reverse_button():
nonlocal reverse_scaling
reverse_scaling = not reverse_scaling
if reverse_scaling:
reverse_button.config(text="Reverse On")
else:
reverse_button.config(text="Reverse Off")
reverse_button = tk.Button(root, text="Reverse Scaling", command=on_reverse_button)
reverse_button.pack()
def on_mouse_wheel(event):
nonlocal reverse_scaling
if reverse_scaling:
if event.delta > 0 or event.num == 4:
scale_factor = 0.9
else:
scale_factor = 1.1
else:
if event.delta > 0 or event.num == 4:
scale_factor = 1.1
else:
scale_factor = 0.9
x = event.x
y = event.y
canvas.scale("all", x, y, scale_factor, scale_factor)
# Bind mouse wheel events
canvas.bind("<MouseWheel>", on_mouse_wheel) # Windows
canvas.bind("<Button-4>", on_mouse_wheel) # Linux zoom in
canvas.bind("<Button-5>", on_mouse_wheel) # Linux zoom out
root.mainloop()
if __name__ == '__main__':
main()
内存规划可视化
最新推荐文章于 2026-07-04 08:58:07 发布
393

被折叠的 条评论
为什么被折叠?



