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

时间:2011-04-12 22:57:51

标签: java geometry awt polygon computational-geometry

我正在使用Java Polygon对象,该对象存储一组点,这些点定义构成形状的线。

我如何选择其中一条线上的随机点? Polygon类中是否有任何方法可以使这更容易?

为了澄清,我想从多边形边缘的任何位置选择一个随机点,而不是从定义顶点的集合中选择。

3 个答案:

答案 0 :(得分:5)

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

现在找到0到perimiter范围内的随机数。

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

假装你沿着段的“走那段距离”等于你的剩余价值,你就会在周边有一个随机点。

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

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

答案 1 :(得分:2)

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

请考虑以下事项:
假设我们有五角大楼。我们有5个边和5个顶点。由于顶点存储在Polygon中并且需要边缘,因此我们需要两个顶点来形成一条线,因此我们在05之间随机选择。假设我们随机生成了数字r = 0

假设xpoints[r] = 1ypoints[r] = 1xpoints[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))

答案 2 :(得分:-1)

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