寻找最短距离的点.py

寻找最短距离的点.py

"""
  寻找最短距离的点.py
  本程序寻找一个点到多个点最小距离,然后到最小距离的点的索引号返回。  最后用turtle进行可视化。
"""
import random
import turtle
import numpy as np

def shortest_distance_index(onepoint,others):
    """
       onepoint:一个点,如[(0,0)]
       others:另一些点,如[(10,10),(20,33),(12,48)]
       返回到距离最近的点的others中的索引号
    """
    others = np.array(others)                                                         # 换成numpy数组
    distances = np.sqrt(np.sum(np.asarray(onepoint - others) ** 2, axis=1))
    # distances即为输入的数组;axis默认为None,即输入的数组为平坦数组(即reshape为一维数组),
    # axis=0为列向量输入,axis=1为行向量输入;如果提供out参数,则会插入输入数组当中。
    index = np.argmin(distances, axis=None, out=None)
    return index

point = np.array([(0,0)])                  # 一个点,这里用原点
ps = [(random.randint(-300,300),random.randint(-300,300) ) for _ in range(10)]# 生成10个点
print(ps)
i = shortest_distance_index(point,ps)
print(i)

turtle.setup(640,640)
turtle.speed(0)
turtle.delay(0)
turtle.penup()
for p in ps:
    turtle.goto(p)
    turtle.dot(10)
turtle.goto(0,0)
turtle.dot(10,'red')
turtle.pendown()
turtle.goto(ps[i])
turtle.done()

# 本程序为在Python精灵模块中准备新增find_in_closest的预备测试程序。
# find_in_closest准备用来在下一个版本中寻找一个点到多个角色的最短距离,并且返回那个角色。
# Python精灵模块用最简单的代码创建小游戏小动画,用于教育目的。最新版安装方法:
pip install sprites --upgrade
李兴球

李兴球的博客是Python创意编程原创博客