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的类实例属性访问规则探讨
Jan 30 Python
Python计算三角函数之asin()方法的使用
May 15 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
基于Python脚本实现邮件报警功能
May 20 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
简单谈谈Python面向对象的相关知识
Jun 28 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
PHP 定界符 使用技巧
2009/06/14 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
图片按比例缩放函数
2006/06/26 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
JS对HTML表格进行增删改操作
2016/08/22 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Python处理中文标点符号大集合
2018/05/14 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
超简单使用Python换脸实例
2019/03/27 Python
在django view中给form传入参数的例子
2019/07/19 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Python3 读取Word文件方式
2020/02/13 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
体操比赛口号
2014/06/10 职场文书
一般党员对照检查材料
2014/09/24 职场文书
教师节标语大全
2014/10/07 职场文书
党员评议思想汇报
2014/10/08 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
涨价通知怎么写
2015/04/23 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python