Python隨機(jī)生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點(diǎn)
Python有一隨機(jī)函數(shù)可以產(chǎn)生[0,1)區(qū)間內(nèi)的隨機(jī)數(shù),基于此函數(shù)生成隨機(jī)分布在任意三角形內(nèi)的點(diǎn)
由數(shù)學(xué)知識(shí)得知:
幾何體的向量表達(dá)形式
直線:

線段:

推廣到高維
三維平面:

三角形:

注釋,v這個(gè)向量表示的是在圖形上的點(diǎn)的坐標(biāo),根據(jù)數(shù)學(xué)知識(shí)得知,直線和三維平面內(nèi)的v構(gòu)成的點(diǎn)集是放射集,而線段則是凸集, 其余向量是不在同一個(gè)點(diǎn)或者同一個(gè)平面的點(diǎn)的坐標(biāo)構(gòu)成的列向量
那么針對(duì)三角形可以寫成如下:
我們可以先生成隨機(jī)的貝塔,然后隨機(jī)生成阿爾法,然后處理阿爾法,使得點(diǎn)是隨機(jī)落在三角形內(nèi)的,這里用的是開始生成的隨機(jī)數(shù)的算術(shù)平方根作為阿爾法數(shù)值,關(guān)于為什么這樣可以參考
Python隨機(jī)生成均勻分布在單位圓內(nèi)的點(diǎn)
現(xiàn)附代碼如下:
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()
生成圖:

作為推廣,其實(shí)多個(gè)多邊形也是可以這樣生成的,只需要分割為多個(gè)三角形,根據(jù)三角形面積比例,控制樣本比例即可。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python 中的 with open文件操作的最佳實(shí)踐
在 Python 中,with open() 提供了一個(gè)簡(jiǎn)潔而安全的方式來處理文件操作,它不僅能確保文件在操作完成后自動(dòng)關(guān)閉,還能處理文件操作中的異常,避免資源泄漏,本文給大家介紹Python 中的 with open文件操作的最佳實(shí)踐,感興趣的朋友一起看看吧2025-04-04
python標(biāo)識(shí)符命名規(guī)范原理解析
這篇文章主要介紹了python標(biāo)識(shí)符命名規(guī)范原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
python合并已經(jīng)存在的sheet數(shù)據(jù)到新sheet的方法
今天小編就為大家分享一篇python合并已經(jīng)存在的sheet數(shù)據(jù)到新sheet的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python中根據(jù)字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猵ython中根據(jù)字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2016-06-06

