ActionScript 3 圆内的随机点

示例

首先定义圆的半径及其中心:

var radius:Number = 100;
var center:Point = new Point(35, 70);

然后从中心生成一个以弧度为单位的随机角度:

var angle:Number = Math.random() *Math.PI* 2;

然后生成返回点的有效半径,因此它将位于给定的范围内radius。一个简单的方法是不行的,因为通过这种分布,生产点将在一半时间的一半半径的内圆中终止,但是该圆的平方是原始圆的四分之一。要创建适当的分布,函数应如下所示:Math.random()*radius

var rad:Number=(Math.random()+Math.random())*radius; // 是的,两个单独的随机调用
if (rad>radius) { rad=2*radius-rad; }

此函数产生一个值,该值的概率函数从零的0线性增加到的最大值radius。发生这种情况是因为随机值的总和具有等于所有随机值的各个密度函数的卷积的概率密度函数。对于普通年级的人来说,这是一些扩展的数学,但是提供了一种GIF来绘制两个统一分布密度函数的卷积函数图,这些函数被解释为“盒信号”。的if操作者折叠在其最大值所得的函数,只留下一个锯齿形图形。

选择此函数的原因是,位于radius=r和之间的圆带的平方radius=r+dr随着线性增加r和很小的常数而线性增加,dr因此dr*dr<<r。因此,在中心附近产生的点的数量比在圆的边缘处产生的点的数量小,与中心区域的半径小于整个圆的半径相同。因此,总的来说,点在整个圆上均匀分布。

现在,获得您的随机位置:

var result:Point = new Point(
   center.x+ Math.cos(angle) * rad,
   center.y+ Math.sin(angle) * rad
);

要在圆上获得随机点(在给定半径的圆的边缘上),请使用radius代替rad。

PS:该示例最终由于对数学的解释而变得繁重。