如何解决如何递归绘制一组给定点的质心?
假设我有一个已知坐标的点。我想编写代码,逐步绘制这些点的所有可能组合的质心,然后使用所有点(包括先前绘制的质心)重复相同的操作。
但是,我不知道我应该使用 python 中的哪些库或如何使用,或者甚至 python 是否是此类内容的最佳语言。如果更适合我的目的,我愿意学习任何其他语言。
我很想知道给定不同的初始点(主要是多边形的顶点),图形如何演变。
编辑:通过递归,我的意思是从 n 个点开始,我得到 nC3 个质心。接下来我将使用 n + nC3 个点作为我的初始点来找出下一组质心
解决方法
这是将“递归”绘制点的代码,具有给定的精度。对于 accuracy = 1
,它绘制点的所有质心的坐标。对于accuracy = 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,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,y])
return centroids(prev_centroid + centroid_list,accuracy-1)
这是程序最重要的功能,它需要2个列表(prev_centroid
,coordinates
)和一个整数(accuracy
)。它使用所有坐标来计算它们各自的质心,并将所有坐标附加到名为 centroid_list
的列表中。然后它再次调用函数 centroids() 递归 并将 accuracy
调用为 previous_accuracy_minus_1
,将 prev_centroid
调用为 prev_centroid + centroid_list
和 coordinates
centroid_list
因为我们希望将这些质心坐标作为下一次质心计算的初始坐标。此外,我们在这个函数中设置了条件,如果 accuracy
变为 0,那么该函数基本上停止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。