Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.06.2012, 11:59
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 1  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Question Создание случайной точки в определенных пределах

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

Старый 10.06.2012, 12:23
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var p:Point = Point.polar(Math.random()*maxDistance, Math.random*2*Math.PI);
Добавлено через 1 минуту
Ну, это для (0, 0) конечно; потом просто смещаете ее на координаты первой точки.
__________________
Reality.getBounds(this);

Старый 10.06.2012, 12:54
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 3  
Ответить с цитированием
Tetraeon

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

Старый 10.06.2012, 12:57
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 4  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
забыли скобочки круглые у 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
__________________
:)

Старый 10.06.2012, 13:15
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 5  
Ответить с цитированием
Tetraeon

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

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


Последний раз редактировалось Tetraeon; 10.06.2012 в 13:25.
Старый 10.06.2012, 15:07
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Еще вариант который приходит в голову, без генерации лишних точек, это пересчитывать удаление от центра добавляя к нему (r - sqrt((r - s)^2)) таким образом компенсируя большую плотность в районе центра за счет того, что чем ближе к центру находится найденная точка на тем большую величину мы ее сместим от центра.
r - радиус окружности, s - произвольное смещение от центра так что 0 <= s <= r.
__________________
Hell is the possibility of sanity

Старый 10.06.2012, 15:17
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Чтоб распределение по площади круга было равномерным (в центре не было больше точек, чем по краям):
Код AS3:
var distRand:Number = Math.random();
distRand = Math.sqrt(distRand);
var p:Point = Point.polar(distRand*maxDistance, Math.random()*2*Math.PI);
Сплющить по у можно легко и просто, берёте и плющите, про это писать неинтересно =)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 10.06.2012 в 17:27.
Старый 10.06.2012, 16:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Нажмите на изображение для увеличения
Название: Клип_45.png
Просмотров: 179
Размер:	84.1 Кб
ID:	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();
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 10.06.2012 в 17:37. Причина: обновил алгоритм -De-
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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