Python 如何递归绘制给定点集的质心?
假设我有n个已知坐标的点。我想写一段代码,逐步绘制这些点的所有可能组合的质心,然后使用所有点(包括之前绘制的质心)重复相同的操作 然而,我不知道我应该使用python中的哪些库,或者如何使用,或者甚至连python都不知道它是否是这类东西的最佳语言。如果其他语言更适合我的目的,我愿意学习 我感兴趣的是,在给定不同的初始点(主要是多边形的顶点)时,图形是如何演变的Python 如何递归绘制给定点集的质心?,python,plot,drawing,polygon,draw,Python,Plot,Drawing,Polygon,Draw,假设我有n个已知坐标的点。我想写一段代码,逐步绘制这些点的所有可能组合的质心,然后使用所有点(包括之前绘制的质心)重复相同的操作 然而,我不知道我应该使用python中的哪些库,或者如何使用,或者甚至连python都不知道它是否是这类东西的最佳语言。如果其他语言更适合我的目的,我愿意学习 我感兴趣的是,在给定不同的初始点(主要是多边形的顶点)时,图形是如何演变的 编辑:通过递归,我的意思是从n个点开始,我得到nC3质心。接下来,我将使用n+nC3点作为初始点,找出下一组质心这是以给定精度“递归”
编辑:通过递归,我的意思是从n个点开始,我得到nC3质心。接下来,我将使用n+nC3点作为初始点,找出下一组质心这是以给定精度“递归”绘制点的代码。对于
精度=1
,它将绘制点的所有质心的坐标。对于精度=2
,它绘制所有点的质心坐标和点的质心的质心,依此类推
import matplotlib.pyplot as plt
from itertools import combinations
def centroids(prev_centroid, coordinates, accuracy):
if accuracy == 0:
return list(set([tuple(ti) for ti in prev_centroid]))
centroid_list = []
for point1, point2, point3 in combinations(coordinates, 3):
x = (point1[0] + point2[0] + point3[0])/3
y = (point1[1] + point2[1] + point3[1])/3
centroid_list.append([x, y])
prev_centroid += centroid_list
return centroids(prev_centroid, centroid_list, accuracy-1)
coordinates = *your_coordinates*
accuracy = *your_accuracy*
prev_centroid = []
coordinates_to_plot = centroids(prev_centroid, coordinates, accuracy)
xcoordinates = []
ycoordinates = []
for a in coordinates_to_plot:
xcoordinates.append(a[0])
ycoordinates.append(a[1])
plt.plot([xcoordinates], [ycoordinates], "o")
plt.show()
注意:您必须已为此代码安装matplotlib和itertools库
代码说明:
def centroids(prev_centroid, coordinates, accuracy):
if accuracy == 0:
return list(set([tuple(ti) for ti in prev_centroid]))
centroid_list = []
for point1, point2, point3 in combinations(coordinates, 3):
x = (point1[0] + point2[0] + point3[0])/3
y = (point1[1] + point2[1] + point3[1])/3
centroid_list.append([x, y])
return centroids(prev_centroid + centroid_list, centroid_list, accuracy-1)
这是程序最重要的功能,它包含两个列表(
prev_centroid
,坐标
)和一个整数(精度
)。它使用所有的坐标来计算它们各自的质心,并且所有的坐标都被添加到名为质心\u list
的列表中。然后它再次递归调用函数centroids(),并将accurity
调用为previous\u-accurity\u-1
,将prev\u-centroid
调用为prev\u-centroid+centroid\u-list
,以及坐标
作为质心_列表
,因为我们希望将这些质心坐标作为下一次质心计算的初始坐标。此外,我们在该函数中设置了一个条件,即如果精度
为零,则函数基本停止。通过“绘图”,您的意思是使用matplotlib(实际绘制三角形并绘制点)还是仅查找三角形质心的坐标?我想在屏幕上看到点。我不知道如何从matplotlib中执行,或者是否可以执行。好的。另外,你能解释一下递归绘制它们是什么意思吗?这是否意味着您想使用递归函数来实现这一点?编辑了问题,请参见。如果答案足够好且符合要求,请接受它。