当前位置: 首页 > 后端技术 > Python

使用Scipy库函数解决凸包问题

时间:2023-03-26 18:07:45 Python

scipy.spatial.ConvexHull函数可以直接解决凸包问题。它返回两个值,即面积和单纯形。area:是一个值,表示最大凸多边形的面积。simplices:是一个二维数组,大小为[N,2]。N表示最大凸多边形包含的点的个数,2表示相邻两个外围点在数组中的顺序,即它们的下标。需要注意的是,二维数组中相邻两个元素形成的连线(两点连成一条线)在图中不一定是相连的,即最大凸多边形的N-1条边,和不一定逆时针或顺时针生成。1.代码importnumpyasnpimportrandomimportscipy.spatialassptimportmatplotlib.pyplotaspltplt.rc('font',family='simhei',size=10)#设置中文显示,字体大小points=np.random.randint(0,50,(50,2))plt.scatter(x=points[:,0],y=points[:,1],marker='*',color='blue')#调用ConvexHull函数求解convexPackageproblemhull=spt.ConvexHull(points=points)forsiminhull.simplices:plt.plot(points[sim,0],points[sim,1],'red')#数组下标用逗号分隔Rows和列是分开处理的。(也可以在逗号两边加冒号,限制行或列的范围)#比如points[sim,0]表示所有点的横坐标下标为sim(两行),纵坐标下标是0(1列)这几个值正好是相邻两个点的x坐标,两个值,加上points[sim,1]也是两个值,一共4个值,满足plot的参数要求。#plot基本参数要求:plt.plot(点1的横坐标,点2的横坐标,点1的纵坐标,点2的纵坐标,color='')plt.title("凸多边形的最大面积:{}".format(hull.area))#图形标题plt.show()2.运行结果