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中的map()函数和reduce()函数的用法
Apr 27 Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
python实现zabbix发送短信脚本
Sep 17 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
python默认参数调用方法解析
Feb 09 Python
Python如何转换字符串大小写
Jun 04 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
Python 里最强的地图绘制神器
Mar 01 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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 调试工具Debug Tools
2011/04/30 PHP
php基础学习之变量的使用
2011/06/09 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
js获取class的所有元素
2013/03/28 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
Python开发常用的一些开源Package分享
2015/02/14 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
质检部部长职责
2013/12/16 职场文书
领导党性分析材料
2014/02/15 职场文书
建筑工地宣传标语
2014/06/18 职场文书
商品陈列协议书
2014/09/29 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
python 模块重载的五种方法
2021/04/24 Python