1.分析
在一个圆内随机生成位置,还要尽量均匀。
在这里我们可以以圆心为原点,然后展开一个坐标系,我们可以把圆分成4部分,也就是四个象限。
然后我们就只需要在这个四个范围内依次生成位置就好啦。
具体如何实现呢?
2.代码
int count = 100;//生成点的个数
//四个区域的单位顶点
Vector2[] allArea = { new Vector2(1, 1), new Vector2(1, -1), new Vector2(-1, 1), new Vector2(-1, -1) };
List<Vector2> allPos = new List<Vector2>();//存储生成的位置
for(int i=0;i<count;i++)
{
Vector2 pos = Random.insideUnitCircle;//随机一个圆内的位置出来
float x = Mathf.Abs(pos.x);//把随机出来的位置固定到第一象限
float y = Mathf.Abs(pos.y);
int index = i % allArea.Length;//计算allArea的下标
Vector2 point = new Vector2(x, y) * allArea[index];//确定这个点所在的区域
allPos.Add(point);//把点存起来
}
这样我们就尽量均匀的吧点随机生成到圆内
下面我们来看效果
我们可以看到相对还是比较均匀的
我们再来看看生成四个点的效果
1.这个是没有处理过的,标红的是中心点
2.这个是处理过的标红的是中心点
3.小结
其实不这样处理也可以比较均匀的随机在圆里面,这样处理的好处就是我们可以保证每一块区域生成的点比其他区域最多差一个。生成点的个数越少就越可以体现出来这个算法的优势。所以还是看个人需求,一般没有特殊要求的话光一个Random.insideUnitCircle;也足够了。
谢谢大家!