当前位置: 首页 > 面试题库 >

如何获得不规则多边形内部的随机点?

田向荣
2023-03-14
问题内容

我有一组描述不规则多边形区域边界的点:

int [] x = { /*...*/ };
int [] y = { /*...*/ };

如何从多边形内部均匀选择一个随机点?


问题答案:

我将分三个步骤进行操作:

  1. 创建一个三角形列表,这些列表覆盖与给定的多边形相同的区域。如果多边形是凸面的,则比较容易,因为您可以让所有三角形共享一个共同的顶点。如果不能保证多边形是凸的,则必须找到更好的多边形三角剖分技术。这是相关的维基百科文章。

  2. 随机选择要使用的三角形,并按其面积加权。因此,如果三角形A是面积的75%,而三角形B是面积的25%,则应该选择75%的时间选择三角形A,25%的时间选择B。这意味着找到每个三角形占总面积的比例,并将其存储在列表中。然后从0到1生成一个随机双数(Math.random()这样做),并减去列表中的每个值,直到下一个减法将其变为负数为止。这将随机选择一个考虑了面积权重的三角形。

  3. 在所选三角形内随机选择一个点。您可以使用以下公式:对三角形中的随机点进行采样。

或者,您可以选择一个覆盖整个多边形的矩形(例如其边界框),然后随机选择该矩形内的一个点。然后检查该点是否在多边形内,如果不是,则生成一个新的随机点,然后重试,并根据需要重复。从理论上讲,这可能要花很长时间,但实际上最多只能进行四到五次尝试。

但是,您仍然需要一种算法来确定该点是否在多边形内。如果您已经将其分解为三角形,则更容易,只需检查它是否在其中任何一个中即可。



 类似资料:
  • 我有一个二维点的列表,它是一个闭环,二维,凹形多边形。 我想生成第二个多边形,它完全在第一个多边形的内部,并且第一个多边形的每个顶点/边缘到第二个多边形的每个顶点/边缘具有恒定的距离。 基本上,第一个多边形是“外墙”,第二个多边形是“内壁”,两墙之间的距离不变。 怎么做这样的事?

  • 问题内容: 考虑以下代码: 它将返回30到20之间的随机数。但是,我需要它的范围包括负数。 我如何在这一代中包括负数? 我曾尝试使用会是负数的数学,但这导致了错误。简单地减去或加上负数将不会产生所需的值。 编辑: 对不起,我只有半醒。正确的代码是。 问题答案: 要使用和获取设置范围内的随机数: 也适用于负数 所以: 会产生介于-10和30之间的随机整数。 也可以加倍

  • 我有一个包含数千个多边形的形状文件。他们中的许多人接触但不交叉。我需要接电话的公用线路。 我尝试使用下面的函数来达到我的目的,但是输出显示了一些,其中的行只有两个点,这应该是一个整体。 对于,我尝试使用函数在同一个中连接两个短行,如果它们彼此接触。但是结果也显示了一个。 geopandas本身的交叉功能似乎也会导致

  • 在L-4中,它很简单: 但现在在L-5中,这篇文章中描述的没有一种方法是有效的:Laravel-雄辩或流畅的随机行 我的视图文件变为空白。

  • 本文向大家介绍Python随机生成均匀分布在三角形内或者任意多边形内的点,包括了Python随机生成均匀分布在三角形内或者任意多边形内的点的使用技巧和注意事项,需要的朋友参考一下 Python有一随机函数可以产生[0,1)区间内的随机数,基于此函数生成随机分布在任意三角形内的点 由数学知识得知: 几何体的向量表达形式 直线: 线段: 推广到高维 三维平面: 三角形: 注释,v这个向量表示的是在图形

  • 我正在使用Unity,但是解决方案应该是通用的。我将从鼠标点击中获得用户输入,鼠标点击定义了一个封闭的不规则多边形的顶点列表。顶点将定义平面3D网格的外边缘。 为了按程序生成统一的网格,我必须指定所有顶点以及它们如何连接以形成三角形。 所以,对于凸多边形来说,这很简单,我只需要制作顶点为1,2,3,然后是1,3,4的三角形,形成类似孔雀尾巴的形状。 但是对于凹多边形来说就不那么简单了。有没有找到内