<p>您希望在三角剖分的顶点(即点)上进行着色,因此应使用<code>plt.plot</code>函数(替换最后一行之前的线)进行着色</p>
<p>下面是一种方法(继续编写代码)。用以下行替换上一行之前的行(上面的<code>for key</code>循环也应该被删除)</p>
<pre><code>for k, count in neigh.items():
if count <= 5:
plt.plot(tri.points[k, 0], tri.points[k, 1], "og")
elif count == 6:
plt.plot(tri.points[k, 0], tri.points[k, 1], "or")
else:
assert count >= 7
plt.plot(tri.points[k, 0], tri.points[k, 1], "oy")
</code></pre>
<p>通过随机抽取200个点进行三角测量,我得到下图:</p>
<p><a href="https://i.stack.imgur.com/3F3Nw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3F3Nw.png" alt="enter image description here"/></a></p>
<p>注意:为了计算<code>neigh</code>字典,我使用了以下函数(您没有给出实现)。字典的关键是三角测量点中顶点的索引。还要注意的是,有更有效的方法可以做到这一点。例如,将计数存储在numpy数组而不是字典中(例如,使用<code>np.diff(indptr)</code>),并对每种情况使用矢量化操作,而不是在循环中逐个绘制</p>
<pre><code>def num_neighbors(tri):
indptr, indices = tri.vertex_neighbor_vertices
assert len(indptr) == len(tri.points) + 1
vertex_order_map = {}
for k in range(len(indptr) - 1):
num_neighbors_k = indptr[k+1] - indptr[k]
vertex_order_map[k] = num_neighbors_k
return vertex_order_map
</code></pre>
<p>编辑:下面是更有效的矢量化代码。结果是相同的(直到点的着色顺序)</p>
<pre><code>indptr, indices = tri.vertex_neighbor_vertices
neighbor_counter_array = np.diff(indptr)
cond_le_5 = (neighbor_counter_array <= 5)
cond_eq_6 = (neighbor_counter_array == 6)
cond_ge_7 = (neighbor_counter_array >= 7)
plt.plot(tri.points[cond_le_5, 0], tri.points[cond_le_5, 1], "og")
plt.plot(tri.points[cond_eq_6, 0], tri.points[cond_eq_6, 1], "or")
plt.plot(tri.points[cond_ge_7, 0], tri.points[cond_ge_7, 1], "oy")
</code></pre>