内存规划可视化

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值