Python 生成随机折线并找出最短不遮挡路线
以下是一个实现上述要求的 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 文件。
原文地址: https://www.cveoy.top/t/topic/o2mM 著作权归作者所有。请勿转载和采集!