Python 如何递归绘制给定点集的质心?

Python 如何递归绘制给定点集的质心?,python,plot,drawing,polygon,draw,Python,Plot,Drawing,Polygon,Draw,假设我有n个已知坐标的点。我想写一段代码,逐步绘制这些点的所有可能组合的质心,然后使用所有点(包括之前绘制的质心)重复相同的操作 然而,我不知道我应该使用python中的哪些库,或者如何使用,或者甚至连python都不知道它是否是这类东西的最佳语言。如果其他语言更适合我的目的,我愿意学习 我感兴趣的是,在给定不同的初始点(主要是多边形的顶点)时,图形是如何演变的 编辑:通过递归,我的意思是从n个点开始,我得到nC3质心。接下来,我将使用n+nC3点作为初始点,找出下一组质心这是以给定精度“递归”

假设我有n个已知坐标的点。我想写一段代码,逐步绘制这些点的所有可能组合的质心,然后使用所有点(包括之前绘制的质心)重复相同的操作

然而,我不知道我应该使用python中的哪些库,或者如何使用,或者甚至连python都不知道它是否是这类东西的最佳语言。如果其他语言更适合我的目的,我愿意学习

我感兴趣的是,在给定不同的初始点(主要是多边形的顶点)时,图形是如何演变的


编辑:通过递归,我的意思是从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中执行,或者是否可以执行。好的。另外,你能解释一下递归绘制它们是什么意思吗?这是否意味着您想使用递归函数来实现这一点?编辑了问题,请参见。如果答案足够好且符合要求,请接受它。