泰森多邊形之邊界計算

2021-09-24 01:17:05 字數 2051 閱讀 6034

前提:最近公司有乙個需求是根據泰森多邊形的原理計算基站訊號的覆蓋範圍,因此惡補了下泰森多邊形,此處就不對泰森多邊形繼續描述了,有興趣的可以在以下**裡看看:

泰森多邊形原理

環境:python3.5+

包:numpy,scipy.spatial

主要過程:

通過scipy.spatial的voronoi包對基站的經緯度進行泰森多邊形計算,然後通過得到的類裡的部分方法進行計算得到該泰森多邊形的邊界點,當然需要根據業務場景對這些邊界點進行處理後才能符合要求,本次不涉及業務場景,只說明如何得到基站的邊界點。

**:

#偽**

points_mat=pointstomat(jizhan_point)#將基站經緯度列表轉為矩陣

vor = voronoi(points_mat)#通過包計算泰森多邊形

center = vor.points.mean(axis=0)#計算基站的經緯度均值點

ptp_bound = vor.points.ptp(axis=0)#計算基站的經緯度極差

finite_segments = #存放有限端點的中垂線

infinite_segments = #存放通過計算後的無限端點的中垂線

for pointidx, ******x in zip(vor.ridge_points, vor.ridge_vertices):

******x = np.asarray(******x)

if np.all(******x >= 0):

else:

i = ******x[******x >= 0][0] # finite end voronoi vertex

t = vor.points[pointidx[1]] - vor.points[pointidx[0]] # tangent

t /= np.linalg.norm(t)

n = np.array([-t[1], t[0]]) # normal

midpoint = vor.points[pointidx].mean(axis=0)

direction = np.sign(np.dot(midpoint - center, n)) * n

far_point = vor.vertices[i] + direction * ptp_bound.max()

dingjian_bian={}

fincount=0

infincount=0

for bian,poi in vor.ridge_dict.items():

if dingjian_bian.get(bian) ==none:

dingjian_bian[bian]=''

if -1 in poi:

dingjian_bian[bian]= infinite_segments[infincount]

infincount +=1

else:

dingjian_bian[bian]= finite_segments[fincount]

fincount +=1

jizhan_bianjie={}

for index in range(len(jizhan_point)):

if jizhan_bianjie.get(index)==none:

jizhan_bianjie[index]=

for k,v in dingjian_bian.items():

if index in k:

if k[0] ==index:

po = [v[0][0],v[0][1]],[v[1][0],v[1][1]]

else:

po = [v[1][0],v[1][1]],[v[0][0],v[0][1]]

if po not in jizhan_bianjie[index]:

#jizhan_bianjie即為各個基站對應的邊界點

原理很簡單,就是中垂線原理,然後用已知頂點和基站連線中點吹方向上用極差完成無限變有限,但是這個最後需要乙個獲取最長路徑的工作,即把[1,2],[2,3],[1,9]變為[9,1,2,3]。

python 泰森多邊形邊界 簡單泰森多邊形的繪製

本期介紹泰森多邊形,又叫沃羅諾伊圖 voronoi diagram basic 修改過並且加了注釋 mesh mesh庫提供了更為方便的建立方式。只需提供點的座標,可以輕鬆獲得泰森多邊形圖案 每個部分,以及邊界,並且可以單獨為其指定樣式。he mesh he mesh庫除了二維的例子以外,還包含泰森...

計算幾何 多邊形

判定凸多邊形 頂點凹凸性法 判斷點在凸多邊形內外 與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊形外。水平 垂直交叉點數判別法 適用於任意多邊形包括凹凸邊形 注意到如果從p作水平向左的射線的話,如果p在多邊形內部,那麼這條射線與多邊形的交點必為奇數,如果p...

三角剖分 與 泰森多邊形

泰森多邊形 大概就是乙個平面劃分,平面上的每個點劃分到離它最近的關鍵點上。delaunay三角剖分和泰森多邊形是對偶圖。delaunay三角剖分 定理 對於任何一種三角剖分,三角形個數和外圍凸包點數之和為2n 2。delaunay三角剖分的性質 1.平面上的點集有且僅有唯一的delaunay三角剖分...