Python随机生成均匀分布在三角形内或者任意多边形内的点


Posted in Python onDecember 14, 2017

Python有一随机函数可以产生[0,1)区间内的随机数,基于此函数生成随机分布在任意三角形内的点
由数学知识得知:
几何体的向量表达形式

直线:

Python随机生成均匀分布在三角形内或者任意多边形内的点

线段:

Python随机生成均匀分布在三角形内或者任意多边形内的点

推广到高维

三维平面:

Python随机生成均匀分布在三角形内或者任意多边形内的点

三角形:

Python随机生成均匀分布在三角形内或者任意多边形内的点

注释,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()

生成图:

Python随机生成均匀分布在三角形内或者任意多边形内的点

作为推广,其实多个多边形也是可以这样生成的,只需要分割为多个三角形,根据三角形面积比例,控制样本比例即可。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python格式化压缩后的JS文件的方法
Mar 05 Python
Python字符串处理之count()方法的使用
May 18 Python
python实现识别手写数字 python图像识别算法
Mar 23 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
对pandas处理json数据的方法详解
Feb 08 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
python中利用matplotlib读取灰度图的例子
Dec 07 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python3 assert断言实现原理解析
Mar 02 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
Django框架模板用法详解
Jun 10 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 #Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 #Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 #Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 #Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 #Python
windows下Virtualenvwrapper安装教程
Dec 13 #Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 #Python
You might like
德劲1103二次变频版的打磨
2021/03/02 无线电
php 特殊字符处理函数
2008/09/05 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
2016/06/24 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python连接SQLServer2000的方法详解
2017/04/19 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
python实现感知机模型的示例
2020/09/30 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
模具设计与制造专业应届生求职信
2013/10/18 职场文书
国旗下演讲稿
2014/05/08 职场文书
欢迎领导检查标语
2014/06/27 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python