получать случайные очки в конусе зрения - PullRequest
2 голосов
/ 05 августа 2011

Я пытаюсь заставить моего игрового персонажа (рыб) отправиться в новое сгенерированное место назначения только на то, что «видит» его текущий конус зрения, поэтому я нарисовал треугольник 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);
}

Хостинг imgur.com

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Не проще ли сначала выбрать случайный угол (в указанном радиусе), а затем использовать этот угол для выбора случайного расстояния от рыбы?

Что-то вроде:

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 голос
/ 05 августа 2011

Способ вычисления случайной точки в прямоугольнике недопустим. Прежде всего вы используете прямоугольник, а не конус (конус - это трехмерная геометрическая фигура). Вот так я бы рассчитал случайную точку внутри прямоугольника (я собираюсь использовать равнобедренный треугольник)

ВНИМАНИЕ: Удивительный MSPaint skillz.

enter image description here

Сначала мы получим позицию по оси y, используя Math.randon(), которая дает нам случайное значение от 0 до 1 (назовите его rndY).

Далее нам нужно вычислить позицию на оси x. Мы рассчитываем это так:

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

Это гарантирует нам, что позиция на оси x всегда будет в треугольнике.

Чтобы исправить вашу локальную глобальную проблему, было бы полезно больше источника или флага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...