首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择多边形线上的随机点

选择多边形线上的随机点
EN

Stack Overflow用户
提问于 2011-04-13 06:57:51
回答 3查看 1.7K关注 0票数 3

我使用的是一个Java Polygon对象,它存储了一个点数组,这些点数组定义了构成形状的线。

我该如何在这些直线上选择一个随机点呢?Polygon类中有没有什么方法可以让这一切变得更容易呢?

为了清楚起见,我想从多边形边缘上的任何位置选取一个随机点,而不一定是从定义的顶点集中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 07:12:14

你要做的第一件事就是找到多边形的周长。

现在找到一个随机数,范围从0到周长。

然后,迭代多边形的线段,从值中减去线段的长度,直到下一个线段的长度大于当前值。

假设你正在沿着与你的剩余值相等的线段“走那段距离”,那么你将在周长上有一个随机点。

================================

另一个可行的选择是拾取按其长度偏差的随机分段(可以缓存每个多边形的阈值),然后在随机拾取的分段上拾取随机点。对于较大的多边形(缓存阈值后的顺序为1),速度会更快,但会经过两倍的随机数。

票数 5
EN

Stack Overflow用户

发布于 2011-04-13 07:16:44

使用点斜率形式为连接顶点的n边中的一条随机选择的边创建y = mx + b方程。顶点在Polygon.xpointsPolygon.ypoints中定义。

考虑以下几点:

假设我们有一个五边形。我们有5条边和5个顶点。因为我们有存储在Polygon中的顶点,并且需要一条边,所以我们需要两个顶点来形成一条线,所以我们在05之间随机选择。假设我们随机生成的数字r = 0

假设xpoints[r] = 1ypoints[r] = 1xpoints[r+1] = 2ypoints[r+1] = 4

对于m,我们有

代码语言:javascript
复制
m = (4-1)/(2-1) = 3

对于点斜率形式,我们有

代码语言:javascript
复制
(y - 1) = m(x - 1)
(y - 1) = 3(x - 1) --> y = 3x - 2

现在,在这条边的两个x边界之间选择一个随机点,即在域[0,2]中,你就有了随机点(x, y(x))

票数 2
EN

Stack Overflow用户

发布于 2011-04-13 07:06:53

如果数组中有n个点,请使用java Random类。

代码语言:javascript
复制
java.util.Random r = new java.util.Random();
int num = r.nextInt(n); // n is the highest random number generated, also the size of the array
fuctionThatUsesPoint(myPolygon.xpoints[num], myPolygon.ypoints[num]);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5642594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档