我使用的是一个Java Polygon对象,它存储了一个点数组,这些点数组定义了构成形状的线。
我该如何在这些直线上选择一个随机点呢?Polygon类中有没有什么方法可以让这一切变得更容易呢?
为了清楚起见,我想从多边形边缘上的任何位置选取一个随机点,而不一定是从定义的顶点集中。
发布于 2011-04-13 07:12:14
你要做的第一件事就是找到多边形的周长。
现在找到一个随机数,范围从0到周长。
然后,迭代多边形的线段,从值中减去线段的长度,直到下一个线段的长度大于当前值。
假设你正在沿着与你的剩余值相等的线段“走那段距离”,那么你将在周长上有一个随机点。
================================
另一个可行的选择是拾取按其长度偏差的随机分段(可以缓存每个多边形的阈值),然后在随机拾取的分段上拾取随机点。对于较大的多边形(缓存阈值后的顺序为1),速度会更快,但会经过两倍的随机数。
发布于 2011-04-13 07:16:44
使用点斜率形式为连接顶点的n边中的一条随机选择的边创建y = mx + b方程。顶点在Polygon.xpoints和Polygon.ypoints中定义。
考虑以下几点:
假设我们有一个五边形。我们有5条边和5个顶点。因为我们有存储在Polygon中的顶点,并且需要一条边,所以我们需要两个顶点来形成一条线,所以我们在0和5之间随机选择。假设我们随机生成的数字r = 0。
假设xpoints[r] = 1、ypoints[r] = 1、xpoints[r+1] = 2和ypoints[r+1] = 4。
对于m,我们有
m = (4-1)/(2-1) = 3对于点斜率形式,我们有
(y - 1) = m(x - 1)
(y - 1) = 3(x - 1) --> y = 3x - 2现在,在这条边的两个x边界之间选择一个随机点,即在域[0,2]中,你就有了随机点(x, y(x))。
发布于 2011-04-13 07:06:53
如果数组中有n个点,请使用java Random类。
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]);https://stackoverflow.com/questions/5642594
复制相似问题