以下是一个实现上述要求的 Python 代码:

import random
import tkinter as tk
from tkinter import messagebox


def generate_line_segments():
    num_segments = random.randint(10, 40)
    segments = []
    for _ in range(num_segments):
        x1 = random.randint(0, 500)
        y1 = random.randint(0, 500)
        x2 = random.randint(0, 500)
        y2 = random.randint(0, 500)
        segments.append(((x1, y1), (x2, y2)))
    return segments


def find_shortest_segment(segments):
    shortest_segment = None
    shortest_length = float('inf')
    for segment in segments:
        x1, y1 = segment[0]
        x2, y2 = segment[1]
        length = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
        if length < shortest_length:
            shortest_length = length
            shortest_segment = segment
    return shortest_segment


def draw_segments(canvas, segments, shortest_segment):
    canvas.delete('all')
    for segment in segments:
        x1, y1 = segment[0]
        x2, y2 = segment[1]
        canvas.create_line(x1, y1, x2, y2)
    if shortest_segment:
        canvas.create_line(*shortest_segment[0], *shortest_segment[1], width=3)


def generate_and_find_shortest_segment(canvas):
    segments = generate_line_segments()
    shortest_segment = find_shortest_segment(segments)
    draw_segments(canvas, segments, shortest_segment)


def main():
    root = tk.Tk()
    root.title('Shortest Segment')
    canvas = tk.Canvas(root, width=500, height=500)
    canvas.pack()

    generate_and_find_shortest_segment(canvas)

    button = tk.Button(root, text='Generate', command=lambda: generate_and_find_shortest_segment(canvas))
    button.pack()

    messagebox.showinfo('Instructions', 'Click the 'Generate' button to generate new line segments.')

    root.mainloop()


if __name__ == '__main__':
    main()

这段代码使用 Tkinter 库创建了一个 GUI 窗口,窗口中包含一个 Canvas 组件用于显示生成的线段。点击“Generate”按钮会生成新的线段,并找出最短的一条线段并加粗显示。您可以将这段代码保存为一个 Python 文件,然后使用 pyinstaller 等工具生成 exe 文件。

Python 生成随机折线并找出最短不遮挡路线

原文地址: https://www.cveoy.top/t/topic/o2mM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录