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

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

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
По умолчанию Проблема с равномерным расположением(размещением) N точек в заданной области

Дана прямоугольная область, ширина и высота известны, дано N(вводится пользователем) точек, необходимо расположить эти точки равномерно по области. Загвоздка в том, что под словом равномерно подразумевается, что любая точка должна быть равноудалена от соседних (по x и y осям, т.е. диагональ не учитывается).

Я не прошу делать за меня, просто может кто сталкивался с подобным или знает хотя бы в какую сторону копать, а то второй день пошел а придумать как реализовать такое не могу.
__________________
местонахождение

Старый 14.06.2011, 14:21
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 2  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
В хаотичном порядке или в виде таблицы - строки, столбцы?
__________________
Стой! Опасная зона! Работа мозга!

Старый 14.06.2011, 14:40
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 3  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Если таблицы то:

1 - Собираем все точки в массив
2 - Смотрим сколько строчек и столбцов у нас получается.
3 - По циклу раставляем все точки по принципу:
Код AS3:
obj.x = (canvas.width / (nCollumns + 1)) * (i % nCollumns + 1);
obj.y = (canvas.height / (nRows + 1)) * (Math.floor(i / nCollumns) + 1);
__________________
ranga

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

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
я так понимаю, что в виде таблицы
в чем проблема? определить количество строк и столбцов что-ли?
__________________
сайт, vk

Старый 14.06.2011, 19:20
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
вроде бы у такой задачки нет аналитического решения, только численно
вот эксперимент, попытка получить равноудаленные точки в прямоугольнике:
считаем, что все точки одинаково заряженные частицы и двигаем их в соответствии с силой отталкивания каждой от остальных и от стенок - должно бы устаканится, но реально что-то не очень..
но вообще как вариант может сработать, там enterFrame только для посмотреть, считать-то можно просто в цикле и останавливать при какой-то точности
Код AS3:
public class Main extends Sprite
{
 
	private var rect:Rectangle = new Rectangle(50, 50, 400, 300);
	private var points:Array /*Sprite*/ = [];
	private var num:int = 48;
 
	public function Main():void
	{
		this.graphics.lineStyle(0, 0x000000);
		this.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
		// частицы
		for (var i:int = 0; i < num; i++)
		{
			var item:Sprite = new Sprite();
			item.graphics.beginFill(0x0000FF);
			item.graphics.drawCircle(0, 0, 10);
			item.x = rect.x + rect.width * Math.random();
			item.y = rect.y + rect.height * Math.random();
			points.push(addChild(item));
 
		}
		// считаем-смотрим
		this.addEventListener(Event.ENTER_FRAME, enterFrame);
	}
 
	private function enterFrame(event:Event):void
	{
		for (var i:int = 0; i < num; i++)
		{
			var item:Sprite = points[i];
			var fX:Number = 0;
			var fY:Number = 0;
			var dX:Number;
			var dY:Number;
			var r:Number;
			var fi:Number;
			// отталкивание от других частиц
			for (var j:int = i + 1; j < num; j++)
			{
				dX = points[j].x - item.x;
				dY = points[j].y - item.y;
				r = dX * dX + dY * dY;
				fi = Math.atan2(dY, dX);
				//сила отталкивания
				fX += Math.cos(fi) / r;
				fY += Math.sin(fi) / r;
 
			}
 
			// отталкивание от стенок
			var d:Number = 3; // коефф. влияния стенок
			fX -= d / (item.x - rect.left) / (item.x - rect.left);
			fX += d / (item.x - rect.right) / (item.x - rect.right);
			fY -= d / (item.y - rect.top) / (item.y - rect.top);
			fY += d / (item.y - rect.bottom) / (item.y - rect.bottom);
 
			var p:Number = 1e3;// * (1 + 0.2 * Math.random());
			item.x -= p * fX;
			item.y -= p * fY;
 
			// проверка границ
			if (item.x < rect.left)
				item.x += 2 * (item.x - rect.left);
			if (item.y < rect.top)
				item.y += 2 * (item.y - rect.top);
			if (item.x > rect.right)
				item.x += 2 * (rect.right - item.x);
			if (item.y > rect.bottom)
				item.y += 2 * (rect.bottom - item.y);
 
		}
	}
}

Старый 14.06.2011, 19:34
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 6  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
2silin, Спасибо за идею.
Буду пробовать, если толковое решение найду, выложу код сюда.
__________________
местонахождение

Старый 14.06.2011, 19:50
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
А если построить сетку из равносторонних треугольников? По-моему как раз - точка идеально "равноудалена от соседних"... Может ошибаюсь. Может вообще не в тему

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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