我正在使用Java Polygon对象,该对象存储一组点,这些点定义构成形状的线。
我如何选择其中一条线上的随机点? Polygon类中是否有任何方法可以使这更容易?
为了澄清,我想从多边形边缘的任何位置选择一个随机点,而不是从定义顶点的集合中选择。
答案 0 :(得分:5)
您要做的第一件事就是找到多边形的周长。
现在找到0到perimiter范围内的随机数。
然后,迭代多边形的片段,从您的值中减去片段的长度,直到下一个片段的长度超过您当前的值。
假装你沿着段的“走那段距离”等于你的剩余价值,你就会在周边有一个随机点。
另一个可行的选择是选择一个由长度偏移的随机片段(您可以缓存每个多边形的阈值),然后在随机选取的片段上选择一个随机点。对于大型多边形(缓存阈值后的顺序为1)会更快,但会经过两倍的随机数。
答案 1 :(得分:2)
使用点斜率形式为连接顶点的y = mx + b
边之一中随机选择的边创建n
方程。顶点在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边界之间选择一个随机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]);