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常用列表数据结构小结
Aug 06 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python如何支持并发方法详解
Jul 25 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python自动化调用百度api解决验证码
Apr 13 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短址转换实现方法
2015/02/25 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jquery 使用简明教程
2014/03/05 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python3.0 字典key排序
2008/12/24 Python
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python将unicode转为str的方法
2017/06/21 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
pygame实现打字游戏
2021/02/19 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
keras 读取多标签图像数据方式
2020/06/12 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
什么是唯一索引
2015/07/05 面试题
师德自我剖析材料范文
2014/10/06 职场文书
自主招生自荐信格式
2015/03/04 职场文书
淮海战役观后感
2015/06/11 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python