Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание случайной точки в определенных пределах (http://www.flasher.ru/forum/showthread.php?t=180866)

Tetraeon 10.06.2012 11:59

Создание случайной точки в определенных пределах
 
Здравствуйте ищу совета как создать случайную точку что бы расстояние от нее до другой точки не превышало определенную цифру.

Wolsh 10.06.2012 12:23

Код AS3:

var p:Point = Point.polar(Math.random()*maxDistance, Math.random*2*Math.PI);

Добавлено через 1 минуту
Ну, это для (0, 0) конечно; потом просто смещаете ее на координаты первой точки.

Tetraeon 10.06.2012 12:54

А что может быть не так если выдает ошибку на эту строчку?
1067: Неявное приведение значения типа Function к несоответствующему типу Number.

Aquahawk 10.06.2012 12:57

забыли скобочки круглые у Math.random()
Вот так правильно
Цитата:

var p:Point = Point.polar(Math.random()*maxDistance, Math.random()*2*Math.PI);
Добавлено через 5 минут
а для чего вам нужна такая случайная точка?

Есть просто такая заумная штука как распределение случайной величины, так вот тут оно будет неравномерным, иначе говоря точки ближе к центру будут несколько плотнее чем к краям. Если вы хотите провести какой-то математический эксперимент то нужно чуть другую формулу, самым простым будет генерить точку в квадрате и если расстояние от неё до центра больше нужного радиуса, то пропускать и генерировать новую. Чтобы лучше прочувствовать это дело советую прочитать http://my-tribune.blogspot.com/2010/03/blog-post.html

Tetraeon 10.06.2012 13:15

Это нужно для игры в которой случайным образом будит выбираться тип поведения персонажей и 1м из которых будит передвижение в определенных пределах в случайную точку. Конечно есть 1 нюанс... игра с перспективой и соответственно было бы неплохо эту математическую окружность уменьшить по Y

Добавлено через 1 час 27 минут
Всем спасибо, вы мне очень помогли.

wvxvw 10.06.2012 15:07

Еще вариант который приходит в голову, без генерации лишних точек, это пересчитывать удаление от центра добавляя к нему (r - sqrt((r - s)^2)) таким образом компенсируя большую плотность в районе центра за счет того, что чем ближе к центру находится найденная точка на тем большую величину мы ее сместим от центра.
r - радиус окружности, s - произвольное смещение от центра так что 0 <= s <= r.

-De- 10.06.2012 15:17

Чтоб распределение по площади круга было равномерным (в центре не было больше точек, чем по краям):
Код AS3:

var distRand:Number = Math.random();
distRand = Math.sqrt(distRand);
var p:Point = Point.polar(distRand*maxDistance, Math.random()*2*Math.PI);

Сплющить по у можно легко и просто, берёте и плющите, про это писать неинтересно =)

Wolsh 10.06.2012 16:12

Вложений: 1
Вложение 28075
Код AS3:

for (var i:uint = 0; i < 1000; i++)
{
        var p:Point = Point.polar(Math.random() * 200, Math.random() * 2 * Math.PI);
        this.graphics.beginFill(0xFFCC99, 0.5);
        this.graphics.drawCircle(p.x + 300, p.y / 2 + 300, 3);
        this.graphics.endFill();
}
for (i = 0; i < 1000; i++)
{
        var d:Number = Math.sqrt(Math.random());
        var p2:Point = Point.polar(d * 200, Math.random() * 2 * Math.PI);
        this.graphics.beginFill(0xFFCC99, 0.5);
        this.graphics.drawCircle(p2.x + 800, p2.y / 2 + 300, 3);
        this.graphics.endFill();
}



Часовой пояс GMT +4, время: 02:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.