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中的进程分支fork和exec详解
Apr 11 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
python迭代器与生成器详解
Mar 10 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
Python批量查询域名是否被注册过
Jun 21 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
深入了解Django中间件及其方法
Jul 26 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
通过python检测字符串的字母
Feb 18 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
基于Tensorflow一维卷积用法详解
May 22 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
239军机修复记
2021/03/02 无线电
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
js实现二级导航功能
2017/03/03 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Tensorflow 查看变量的值方法
2018/06/14 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
自我鉴定范文
2013/11/10 职场文书
先进个人获奖感言
2014/01/24 职场文书
车贷收入证明范本
2014/09/14 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
罚站检讨书
2015/01/29 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
大学生社会实践感想
2015/08/11 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers