在多边形的一条线上选择一个随机点

问题描述:

我正在使用Java多边形对象,该对象存储一组定义组成该形状的线的点。在多边形的一条线上选择一个随机点

我该如何去选择这些行之一的随机点? Polygon类中是否有任何方法可以使这更简单?为了澄清,我想从多边形边上的任何位置选取一个随机点,而不一定是从定义的顶点集合中选取一个随机点。

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

现在找到一个随机数,范围为0到perimiter。

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

假设你沿着等于你的剩余价值的线段“走这段距离”,并且你将在外围有一个随机点。

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

另一种可行的选择是选择一个随机段偏向于它们的长度(您可以缓存每个多边形的阈值),然后在随机挑选的线段上随机挑选一个点。大型多边形的速度会更快(在缓存阈值之后排在第1位),但会经历两倍的随机数。

+2

+1 - 这些方法在外围给出*均匀分布的随机点。 – 2011-04-12 23:20:01

如果数组中有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]); 
+1

他想要一个线上的随机点......不是随机的顶点 – 2011-04-12 23:08:32

+0

对不起,我应该在问题中更加清楚。我想从多边形边上的任何位置选取一个随机点,而不一定是从定义的顶点集合中选取的。 – Matt 2011-04-12 23:09:51

+0

@Matt - 问题很清楚,正如原来写的,IMO。 – 2011-04-12 23:15:03

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

请考虑以下内容:
假设我们有一个五边形。我们有5个边和5个顶点。由于我们的顶点存储在Polygon中,并且需要边,所以我们需要两个顶点组成一条线,因此我们在05之间随机选择。假设我们随机生成的号码为r = 0

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

对于m,我们有

m = (4-1)/(2-1) = 3 

对于点斜的形式,我们有

(y - 1) = m(x - 1) 
(y - 1) = 3(x - 1) --> y = 3x - 2 

现在,选择两个X-界之间的随机x这个优势,即在域名[0,2],你有你的随机点(x, y(x))

+0

另外,请注意,如果'r = 5'会发生什么,我们的数组索引为6,这是超出范围。对于'r = 5',我们不用'r + 1'来获得下一个顶点,而是使用'0'。 – 2011-04-12 23:29:31