关于python:使用Scipy库函数解决凸包问题

4次阅读

共计 855 个字符,预计需要花费 3 分钟才能阅读完成。

scipy.spatial.ConvexHull函数能够间接解决凸包问题,它的返回值有两个,别离是 area 和 simplices。

  • area:是一个值,示意最大凸多边形的面积。
  • simplices:是一个尺寸为 [N,2] 的二维数组,N 代表最大凸多边形中蕴含的点数,2 示意相邻两个外围点在数组中的程序,即他们的下标。要留神:二维数组中相邻的两个元素各自组成的连线(两点连成一线)在图中并不一定是相连的,也就是说,最大凸多边形的 N - 1 条边,并不一定是按逆时针或顺时针生成的。

一、代码

import numpy as np
import random
import scipy.spatial as spt
import matplotlib.pyplot as plt
plt.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 函数解决凸包问题
hull = spt.ConvexHull(points=points)


for sim in hull.simplices:
    plt.plot(points[sim, 0], points[sim, 1], 'red')   
    # 数组下标用逗号隔开示意行和列离开解决。(逗号的两边还能够各加冒号限定行或列的范畴)# 比方 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()

二、运行后果


正文完
 0