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中__init__()方法的高级应用
May 11 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
对pandas中apply函数的用法详解
Apr 10 Python
python实现两张图片的像素融合
Feb 23 Python
python实现抖音点赞功能
Apr 07 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
opencv读取视频并保存图像的方法
Jun 04 Python
OpenCV全景图像拼接的实现示例
Jun 05 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实现链结人气统计
2006/10/09 PHP
PHP的5个安全措施小结
2012/07/17 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Django中template for如何使用方法
2021/01/31 Python
接口中的方法可以是abstract的吗
2015/07/23 面试题
怎样在程序里获得一个空指针
2015/01/24 面试题
外企测试工程师面试题
2015/02/01 面试题
家庭教育的心得体会
2014/09/01 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang