【问题标题】:How to draw Android lock screen patterns using Python如何使用Python绘制Android锁屏图案
【发布时间】:2023-01-30 00:48:25
【问题描述】:

这可能看起来微不足道,但我用谷歌搜索并没有找到相关结果。而且我无法访问 ChatGPT,因为不幸的是我出生在中国。

我想找出折线可以通过 n*n 个均匀间隔的格点而不与自身交叉的所有方式。

基本上就像一个典型的 Android 锁屏模式,其中有 9 个点位于 4 个相邻全等正方形的顶点。您可以绘制从顶点到其他顶点的多段线。

我想以编程方式生成所有通过所有 n*n(n >= 3 且 n 为整数)格点而不与自身相交的多段线,但要做到这一点,我需要首先手动绘制此类多段线以找到数学模式。

我可以处理所有的逻辑,但我真的不知道如何编写 GUI,基本上我想要一个显示 n*n 个排列成正方形的格点的窗口,你用鼠标指针绘制多段线,指针自动捕捉到网格,然后单击并按住从一个格子到另一个格子以绘制线条。

我怎样才能做到这一点?

【问题讨论】:

    标签: python user-interface


    【解决方案1】:

    如果你只是需要用它来做可视化,你可以直接使用 PyGame。这里我只是创建了一种在点之间画线的方法,这应该足以让你更好地理解。

    创建窗口

    import pygame
    
    size = 500
    
    pygame.init()
    window = pygame.display.set_mode((size, size))
    

    创建网格

    n = 3
    
    grid = []
    for i in range(n):
        for j in range(n):
            grid.append((i*size//n + size//n//2, j*size//n+size//n//2))
    

    创建并绘制线条

    start_point = None
    end_point = None
    line_points = []
    
    running = True
    
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                closest_point = min(grid, key=lambda x: ((x[0]-mouse_pos[0])**2 + (x[1]-mouse_pos[1])**2)**0.5)
                start_point = closest_point
            elif event.type == pygame.MOUSEBUTTONUP:
                mouse_pos = pygame.mouse.get_pos()
                closest_point = min(grid, key=lambda x: ((x[0]-mouse_pos[0])**2 + (x[1]-mouse_pos[1])**2)**0.5)
                end_point = closest_point
                line_points.append((start_point, end_point))
                start_point = None
                end_point = None
    
        for point in grid:
            pygame.draw.circle(window, (0, 0, 255), point, 10)
    
        for start, end in line_points:
            pygame.draw.line(window, (255, 0, 0), start, end, 5)
    
        pygame.display.update()
    
    pygame.quit()
    

    祝你的项目好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多