python 泰森多边形法函数属性理解(python Voronoi function properties explained in detial)
泰森多邊形又叫馮洛諾伊圖(Voronoi diagram),得名于Georgy Voronoi,是一組由連接兩鄰點(diǎn)線(xiàn)段的垂直平分線(xiàn)組成的連續(xù)多邊形組成。一個(gè)泰森多邊形內(nèi)的任一點(diǎn)到構(gòu)成該多邊形的控制點(diǎn)的距離小于到其他多邊形控制點(diǎn)的距離。(百度百科)
使用 python 的 scipy.spatial.Voronoi 函數(shù)可以得到泰森多邊形,具體代碼如下:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Voronoi.html
1 from scipy.spatial import Voronoi, voronoi_plot_2d 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], 6 [2, 0], [2, 1], [2, 2]]) 7 # 計(jì)算指定點(diǎn)的泰森多邊形 8 vor = Voronoi(points) 9 # 繪制泰森多邊形二維圖像 10 fig = voronoi_plot_2d(vor) 11 plt.show()
運(yùn)行結(jié)果圖片:
之后,得到的結(jié)果vor有許多的屬性,不太聰明的我研究好久,終于看明白,分享給大家。
vor屬性:
points:計(jì)算 Voronoi 的輸入點(diǎn)坐標(biāo)vertices:Voronoi 頂點(diǎn)坐標(biāo)ridge_points:在每條 Voronoi 脊線(xiàn)(ridge line)附近的點(diǎn)(points)的索引ridge_vertices:構(gòu)成每個(gè) Voronoi 脊線(xiàn)(ridge line)的 Voronoi 頂點(diǎn)(vertices)索引
regions:構(gòu)成每個(gè) Voronoi region 的 Voronoi 頂點(diǎn)(vertices)的索引
point_region: Voronoi region和輸入點(diǎn)(point)相對(duì)應(yīng)索引理解圖:
理解順序:
1. 看 vertices 的值: [array([0.5, 0.5]), array([0.5, 1.5]), array([1.5, 0.5]), array([1.5, 1.5])]
它在上圖中橙色字體,它是 Voronoi 的頂點(diǎn),圖上的順序就是根據(jù)這個(gè)值的先后順序得到的。
2. 看 regions 值:[[ ], [-1, 0], [-1, 1], [1, -1, 0], [3, -1, 2], [-1, 3], [-1, 2], [0, 1, 3, 2], [2, -1, 0], [3, -1, 1]]
看它的最大值不超過(guò)vertices的個(gè)數(shù),并且看解釋可以看到它和 vertices 和 voronoi region 有關(guān),我們已經(jīng)知道 vertices 的值和順序,于是就可以推出 voronoi region,也就是途中的藍(lán)色字體,其中 -1 表示這個(gè)頂點(diǎn)是在泰森多邊形外部
3. 看 points 值: [array([0., 0.]), array([0., 1.]), array([0., 2.]), array([1., 0.]), array([1., 1.]), array([1., 2.]), array([2., 0.]), array([2., 1.]), array([2., 2.])]
把它按照順序標(biāo)記在圖上,也就是上圖的紫色字體。
4. 看 point_region 值:[1, 3, 2, 8, 7, 9, 6, 4, 5],你按照紫色的 point 的順序去看藍(lán)色的 Voronoi region 的數(shù)字,就可以知道它們是一一對(duì)應(yīng)的。
5. 看 ridge_points 值:[array([0, 3], dtype=int32), array([0, 1], dtype=int32), array([2, 5], dtype=int32), array([2, 1], dtype=int32), array([1, 4], dtype=int32), array([7, 8], dtype=int32), array([7, 6], dtype=int32), array([7, 4], dtype=int32), array([8, 5], dtype=int32), array([6, 3], dtype=int32), array([4, 5], dtype=int32), array([4, 3], dtype=int32)]
按照每個(gè) points 的索引值,就可以找到 ridge_line 的順序索引值,上圖中是紅色字體部分。
6. 看ridge_vertices 值:[[-1, 0], [-1, 0], [-1, 1], [-1, 1], [0, 1], [-1, 3], [-1, 2], [2, 3], [-1, 3], [-1, 2], [1, 3], [0, 2]]
現(xiàn)在已經(jīng)得到了 ridge_line 的索引,那么按照這個(gè)順序你去看這條線(xiàn)的兩端的端點(diǎn)就明白這個(gè)屬性的意思啦,存在這個(gè)頂點(diǎn)就是vertice相應(yīng)的索引,不存在就是-1。
希望能幫到大家,歡迎任何指正和意見(jiàn)。
總結(jié)
以上是生活随笔為你收集整理的python 泰森多边形法函数属性理解(python Voronoi function properties explained in detial)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kali linux解密栅栏密码,最详细
- 下一篇: linux命令 重定向%3e,linux