首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取最近的未访问点?

获取最近的未访问点?
EN

Stack Overflow用户
提问于 2017-08-26 02:53:44
回答 1查看 34关注 0票数 1

我已经设置了一个有10个点的pygame窗口,现在我正在尝试让每个点连接到以前没有任何点连接到的最近的点。现在,当我运行这个点时,一些点形成了闭环,而不应该有这样的环,除非有一个点应该包含所有的点。

代码语言:javascript
复制
for p in points:
    bestdist=math.inf
    for q in openset:
        if(points[p]!=openset[q]):
            cdist=dist(points[p],openset[q])
            if cdist<bestdist:
                bestdist=cdist
                b=q
    pygame.draw.line(DISPLAYSURF, RED, points[p] ,points[b], 2)
    openset.pop(b,None)
    pygame.display.update()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-26 06:40:31

看一下这个例子。我只需将最近的点附加到connected_points列表并从openset中删除它。当前点只是最后添加的点:current_point = connected_points[-1]

代码语言:javascript
复制
import math
import random
import pygame as pg


def dist(p1, p2):
    return math.hypot(p2[0]-p1[0], p2[1]-p1[1])


def main():
    screen = pg.display.set_mode((640, 480))
    clock = pg.time.Clock()
    points = [(random.randrange(640), random.randrange(480))
              for _ in range(10)]
    openset = set(points)
    connected_points = [random.choice(points)]
    openset.remove(connected_points[-1])

    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True

        if openset:
            bestdist = math.inf
            current_point = connected_points[-1]
            for point in openset:
                cdist = dist(current_point, point)
                if cdist < bestdist:
                    bestdist = cdist
                    nearest_point = point

            connected_points.append(nearest_point)
            openset.remove(nearest_point)

        screen.fill((30, 30, 30))
        for p in points:
            pg.draw.circle(screen, (100, 140, 100), p, 5)
        if len(connected_points) >= 2:
            pg.draw.lines(screen, (150, 50, 50), False, connected_points, 2)

        pg.display.flip()
        pg.time.wait(500)
        clock.tick(30)


if __name__ == '__main__':
    pg.init()
    main()
    pg.quit()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45887844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档