Python随机生成均匀分布在三角形内或者任意多边形内的点

作者:有问必答不知道 时间:2022-02-15 22:02:14 

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随机生成均匀分布在三角形内或者任意多边形内的点

作为推广,其实多个多边形也是可以这样生成的,只需要分割为多个三角形,根据三角形面积比例,控制样本比例即可。

来源:http://blog.csdn.net/u011396359/article/details/53471524

标签:Python,均匀分布
0
投稿

猜你喜欢

  • django query模块

    2021-12-01 09:16:22
  • 使用python 和 lint 删除项目无用资源的方法

    2023-10-22 16:56:08
  • ASP 读取MP3文件帧的信息比特率,采样频率,播放时间

    2010-06-04 12:22:00
  • Thinkphp5.0框架视图view的循环标签用法示例

    2024-06-05 09:22:48
  • SQLServer 设置单词首字母大写

    2024-01-12 20:14:41
  • Python教程之类型转换详解

    2021-03-23 02:48:17
  • Django之第三方平台QQ授权登录的实现

    2023-04-27 16:37:06
  • python自动化之re模块详解

    2021-07-01 19:34:16
  • python datetime处理时间小结

    2022-11-21 01:38:15
  • python去除字符串中空格的6种常用方法

    2023-09-25 12:36:53
  • Hibernate Oracle sequence的使用技巧

    2009-06-19 17:25:00
  • JS设计模式之单例模式(一)

    2024-05-11 09:06:29
  • 小白学Python之实现OCR识别

    2022-02-12 20:35:48
  • asp.net中调用winrar实现压缩解压缩的代码

    2023-07-18 14:30:30
  • php比较两个指定的日期的实例讲解

    2023-06-13 12:11:29
  • Golang学习之平滑重启

    2024-04-25 15:05:57
  • Python从MP3文件获取id3的方法

    2021-04-12 13:35:48
  • 数据分页显示按钮,自动获取url链接

    2009-06-22 12:59:00
  • 浅谈python中真正关闭socket的方法

    2023-11-02 15:41:56
  • Node.js的非阻塞I/O、异步与事件驱动介绍

    2024-05-13 09:35:02
  • asp之家 网络编程 m.aspxhome.com