在视锥中获得随机点

时间:2011-08-05 05:55:13

标签: flash actionscript-3

我试图让我的游戏角色(鱼类)只能根据他们当前的视锥能够“看到”来到新生成的目的地,因此我绘制了一个三角形MC,使其成为视锥和从那里产生锥体区域内的随机点,我使用的代码如下所示,它不断返回我的舞台的顶部坐标为什么会这样?我做了一个localToGlobal,它仍然是相同的

public function getRandomDestination():void
{
    //Math.floor(Math.random()*(1+High-Low))+Low;
    var conePoint:Point = new Point(Math.floor(Math.random() * cone.width), Math.floor(Math.random() * cone.height));
    _destinationX = localToGlobal(conePoint).x;//Math.floor(Math.random()*(1+_maxX-100)+100);
    trace(_destinationX);
    _destinationY = localToGlobal(conePoint).y; //Math.floor(Math.random() *(1+_maxY-100)+100);
    trace(_destinationY);
}

2 个答案:

答案 0 :(得分:2)

首先选择随机角度(在指定的半径范围内)然后使用该角度选择与鱼的随机距离不是更容易吗?

类似的东西:

function selectPosition(maxAngle:Number, maxDistance:Number):Object
{
    var base:Number = rotation + (-(maxAngle/2) + Math.random()*maxAngle);
    var radians:Number = base / 180 * Math.PI;

    var dist:Number = Math.random()*maxDistance;

    return {
        x: Math.cos(radians) * dist,
        y: Math.sin(radians) * dist
    };
}

var result:Object = selectPosition(30, 100);
trace(result.x, result.y);

将返回一个包含x和y点的对象,该点落在指定的角度和距离内。

以上可以直观地表示:

enter image description here

答案 1 :(得分:1)

计算矩形中随机点的方式无效。 首先,您使用的是矩形而非锥形(圆锥是三维几何形状)。这是我如何计算矩形内的随机点(我将使用等腰三角形)

警告:惊人的MSPaint技能。

enter image description here

首先,我们使用y获取Math.randon()轴上的位置。女巫会给我们一个0到1之间的随机值(称之为rndY)。

接下来,我们需要计算x轴上的位置。我们这样计算:

rndX = 0.5 - rndY/2 + rndY * Math.random()

这可以确保x轴上的位置始终位于三角形内。

要解决您的localtoglobal问题更多来源或fla会有所帮助。