Python实现三角形及任意多边形内均匀随机点生成

Cora
Cora
发布时间:2026-10-13| 3人浏览过
原创

本文介绍利用Python生成均匀分布在任意三角形内的随机点的方法。通过结合贝塔分布与线性插值,确保点在三角形内均匀分布,并推广至任意多边形。提供完整代码示例及可视化效果,适用于机器学习数据增强等场景。

Python内置的随机函数可生成[0,1)区间内的随机数。基于这一基础,我们可以进一步实现生成随机分布在任意三角形内部的点。

根据几何学原理,直线的向量表达形式为:

线段的向量表达形式为:

上述概念可推广至高维空间。

在三维空间中,平面的向量表达形式为:

三角形的向量表达形式为:

注:向量v表示图形上点的坐标。根据数学知识,直线和三维平面内的v构成的点集属于仿射集,而线段构成的点集属于凸集。其余向量由不在同一点或同一平面的点坐标组成的列向量构成。

针对三角形,其向量表达式可写为: 我们可以先生成随机的贝塔(Beta)分布变量,然后生成随机的阿尔法(Alpha)变量,并对阿尔法进行处理,以确保点均匀落在三角形内。这里采用初始生成随机数的算术平方根作为阿尔法的数值。具体原理可参考《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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。