Просмотр полной версии : Создание случайной точки в определенных пределах
Tetraeon
10.06.2012, 11:59
Здравствуйте ищу совета как создать случайную точку что бы расстояние от нее до другой точки не превышало определенную цифру.
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 минут
Всем спасибо, вы мне очень помогли.
Еще вариант который приходит в голову, без генерации лишних точек, это пересчитывать удаление от центра добавляя к нему (r - sqrt((r - s)^2)) таким образом компенсируя большую плотность в районе центра за счет того, что чем ближе к центру находится найденная точка на тем большую величину мы ее сместим от центра.
r - радиус окружности, s - произвольное смещение от центра так что 0 <= s <= r.
Чтоб распределение по площади круга было равномерным (в центре не было больше точек, чем по краям):
var distRand:Number = Math.random();
distRand = Math.sqrt(distRand);
var p:Point = Point.polar(distRand*maxDistance, Math.random()*2*Math.PI);
Сплющить по у можно легко и просто, берёте и плющите, про это писать неинтересно =)
28075
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();
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.