我随机生成了20个点,并应用Delaunay三角测量,创建了一个可视化。我不明白为什么外面总有一些点是不相连的。我看了qhull文档,但我找不到可以解决我的问题的设置。我也试过改变种子,但即使使用不同的数字,问题仍然存在。我尝试了scipy.spatial.Delaunay中的选项,比如farthest_site、incremental和qhull_options=“QJ”,但它们没有解决这个问题。
import numpy as np
from scipy.spatial import Delaunay
import matplotlib.pyplot as plt
#The points that I used
np.random.seed(10)
points = 10 * np.random.rand(20, 2)
#qhull_options = "QJ"
tri = Delaunay(points)
plt.plot(points[:, 0], points[:, 1], 'o', markersize=8, label='Points')
for simplex in tri.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
#point1 = points[simplex, 0]
#point2 = points[simplex, 1]
#distance = np.linalg.norm(point1 - point2)
#point_pairs.append((point1, point2))
#distances.append(distance)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Delaunay Triangulation ')
plt.legend()
plt.axis('equal')
plt.show()
"""
[[7.71320643 0.20751949]
[6.33648235 7.48803883]
[4.98507012 2.24796646]
[1.98062865 7.60530712]
[1.69110837 0.88339814]
[6.85359818 9.53393346]
[0.03948266 5.12192263]
[8.12620962 6.12526067]
[7.21755317 2.91876068]
[9.17774123 7.14575783]
[5.42544368 1.42170048]
[3.7334076 6.74133615]
[4.41833174 4.34013993]
[6.17766978 5.13138243]
[6.50397182 6.01038953]
[8.05223197 5.21647152]
[9.08648881 3.19236089]
[0.90459349 3.00700057]
[1.13984362 8.28681326]
[0.46896319 6.26287148]]
"""
'''
1条答案
按热度按时间von4xj4u1#
最小示例
它显示:
我很幸运我的种子,因为(不像你的-即使如此,没有吹牛,我也知道你的问题是什么)它让问题变得很明显:底部的那一条线不可能是三角形的一部分(在您的示例中,您似乎只有闭合三角形
只绘制一个三角形
原因是,你的,否则很聪明,画三角形的方法,只是每个三角形画2条线。每个
simplex
都是一个索引三元组。您可以使用花哨的索引将它们转换为x
和y
的三元组。把这些画出来。但是在matplotlib中,当你绘制3 x和3 y时,你会得到2条线,而不是3条。只要画出第一个三角形就可以了(我们又很幸运,第一个三角形正好是我们已经注意到的那个)
所以,你看,2行(虽然我相信你在这一点上并不需要说服。这是一种错误,有时很难找到,但似乎很明显,一旦看到)。
关闭循环
因此,一个解决方案是使用
plt.fill
(带有选项fill=False
,这可能看起来自相矛盾,因为这意味着填充,但不填充。但fill
的作用是闭合循环,在绘图时,并填充内部,除非要求不要)另一种选择是修改所有的
s
,在末尾添加第一个点显示出完全相同的结果
但是fill,如果没有
fill=False
,也可以很清楚地显示三角形的位置:你的种子
我错过了一个事实,当我在玩我自己的例子时,你编辑了你的帖子来创建一个MRE。现在我可以展示种子x1c4d 1x的情况