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)的,這里用的是開(kā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 Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作示例
這篇文章主要介紹了Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作,結(jié)合實(shí)例形式分析了Django框架中添加Python內(nèi)建日志模塊相關(guān)操作技巧,需要的朋友可以參考下2019-05-05詳解Python模塊化--模塊(Modules)和包(Packages)
這篇文章主要介紹了使用Python的模塊(Modules)和包(Packages),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08python+selenium定時(shí)爬取丁香園的新型冠狀病毒數(shù)據(jù)并制作出類似的地圖(部署到云服務(wù)器)
這篇文章主要介紹了python+selenium定時(shí)爬取丁香園的新冠病毒每天的數(shù)據(jù)并制作出類似的地圖(部署到云服務(wù)器),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀
這篇文章主要介紹了Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Django認(rèn)證系統(tǒng)實(shí)現(xiàn)的web頁(yè)面實(shí)現(xiàn)代碼
這篇文章主要介紹了Django認(rèn)證系統(tǒng)實(shí)現(xiàn)的web頁(yè)面實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python調(diào)用API接口實(shí)現(xiàn)人臉識(shí)別
本文主要介紹了Python調(diào)用API接口實(shí)現(xiàn)人臉識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02基于PyQt5實(shí)現(xiàn)SqlServer數(shù)據(jù)庫(kù)表導(dǎo)出Excel表格小工具
這篇文章主要為大家詳細(xì)介紹了PyQt5的應(yīng)用案例之實(shí)現(xiàn)SqlServer數(shù)據(jù)庫(kù)表導(dǎo)出Excel表格小工具,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2023-12-12