熱線電話:13121318867

登錄
首頁精彩閱讀Python隨機生成均勻分布在三角形內或者任意多邊形內的點
Python隨機生成均勻分布在三角形內或者任意多邊形內的點
2018-01-22
收藏

Python隨機生成均勻分布在三角形內或者任意多邊形內的點

Python有一隨機函數可以產生[0,1)區間內的隨機數,基于此函數生成隨機分布在任意三角形內的點
由數學知識得知:
幾何體的向量表達形式

直線:

線段:

推廣到高維

三維平面:

三角形:

注釋,v這個向量表示的是在圖形上的點的坐標,根據數學知識得知,直線和三維平面內的v構成的點集是放射集,而線段則是凸集, 其余向量是不在同一個點或者同一個平面的點的坐標構成的列向量
那么針對三角形可以寫成如下:

我們可以先生成隨機的貝塔,然后隨機生成阿爾法,然后處理阿爾法,使得點是隨機落在三角形內的,這里用的是開始生成的隨機數的算術平方根作為阿爾法數值,關于為什么這樣可以參考
Python隨機生成均勻分布在單位圓內的點

現附代碼如下:

import numpy as np
import matplotlib.pyplot as plt
 
if __name__ == '__main__':
 x1, y1 = 0, 30
 x3, y3 = 200, -10
 x2, y2 = 100, 200
 sample_size = 500
 theta = np.arange(0,1,0.001)
 x = theta * x1 + (1 - theta) * x2
 y = theta * y1 + (1 - theta) * y2
 plt.plot(x,y,'g--',linewidth=2)
 x = theta * x1 + (1 - theta) * x3
 y = theta * y1 + (1 - theta) * y3
 plt.plot(x, y, 'g--', linewidth=2)
 x = theta * x2 + (1 - theta) * x3
 y = theta * y2 + (1 - theta) * y3
 plt.plot(x, y, 'g--', linewidth=2)
 rnd1 = np.random.random(size = sample_size)
 rnd2 = np.random.random(size=sample_size)
 rnd2 = np.sqrt(rnd2)
 x = rnd2 * (rnd1 * x1 + (1 - rnd1) * x2) + (1 - rnd2) * x3
 y = rnd2 * (rnd1 * y1 + (1 - rnd1) * y2) + (1 - rnd2) * y3
 plt.plot(x,y,'ro')
 plt.grid(True)
 # plt.savefig('demo.png')
 plt.show()

生成圖:

作為推廣,其實多個多邊形也是可以這樣生成的,只需要分割為多個三角形,根據三角形面積比例,控制樣本比例即可。

 以上就是本文的全部內容,希望對大家的學習有所幫助



數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢