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

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

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Но все-равно мне больше нравятся беспроигрышные варианты

Рисуем один круг. соединяем соседние.
Потом рисуем второй круг. Тоже соединяем соседние.
А потом от внутреннего круга к внешнему ведем линии. Единственное что надо - это проследить чтоб одна точка внешнего круга не была связана с более чем одной точкой внутреннего. Но одна точка внутреннего может быть соединена с любым количеством внешнего.



Добавлено через 3 минуты
Кругов концентрических рисуйте хоть с десяток. Только требование - между собой соединять только соседние круги, и только изнутри наружу.

Я ж надеюсь вы не будете пытаться их действительно рисовать кругами?))

Достаточно просто сделать двумерный массив
spiders[<#круга>][<#паука>];

Добавлено через 10 минут
И еще. Круги соединять надо последовательно.

Чтобы не было такого что паук в первом ряду с номером 0, соединен с пауком во втором ряду с номером 5
А паук в первом ряду с номером 1, соединен с пауком во втором ряду с номером 2.

Ибо эти две линии пересекутся... Ну а дальше я хз кажись просто взять и написать

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

Регистрация: Dec 2010
Адрес: Воронеж
Сообщений: 26
Отправить сообщение для Aber с помощью ICQ
Сегодня вечером подумаю что можно сделать.
С кругами все конечно идеально, но алгоритм сложноват получается.
Я пол ночи бился чтоб проверку на пересечение придумать.
Вот кстати код. Он проверяет пересечение 2 линий, но если они пересекаются своими концами, то считает что не пересекаются. Что мне и нужно было.
Со множеством линий пока не тестировал.

Код AS3:
var xx:Array = new Array(5);
var yy:Array = new Array(5);
var Z;
var Ca;
var Cb;
var Ua;
var Ub;
 
xx[1]=10; yy[1]=10;
xx[2]=200; yy[2]=200;
xx[3]=10; yy[3]=200;
xx[4]=200; yy[4]=10;
//Прорисовываем для наглядности
graphics.clear();
graphics.lineStyle(5, 0);
graphics.moveTo(xx[1], yy[1]);
graphics.lineTo(xx[2], yy[2]);
graphics.moveTo(xx[3], yy[3]);
graphics.lineTo(xx[4], yy[4]);
//*********
Ca = (xx[4]-xx[3])*(yy[1]-yy[3]) - (yy[4]-yy[3])*(xx[1]-xx[3]);
Cb = (xx[2]-xx[1])*(yy[1]-yy[3]) - (yy[2]-yy[1])*(xx[1]-xx[3]);
Z = (yy[4]-yy[3])*(xx[2]-xx[1]) - (xx[4]-xx[3])*(yy[2]-yy[1]);
if (Z != 0) 
{
	Ua = Ca/Z;
	Ub = Cb/Z;
	if ((Ua>0) && (Ua<1) && (Ub>0) && (Ub<1) )
	{
		trace("Пересекается")
	}
}

Старый 02.12.2010, 11:43
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 13  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Немного модифицировал Ваш алгоритм, сделал пересечение нескольких линий, саму проверку пересечения оставил Вашу
Код AS3:
var lines:Array = [];
lines.push([[10,10],[50,50]]); //линия с начальными координатами и конечными
lines.push([[60,60],[100,100]]); //линия с начальными координатами и конечными
lines.push([[110,110],[140,140]]); //линия с начальными координатами и конечными
lines.push([[150,30],[0,0]]); //линия с начальными координатами и конечными
lines.push([[70,0],[70,100]]); //линия с начальными координатами и конечными
 
 
//Прорисовываем для наглядности
graphics.lineStyle(5, 0);
for each(var line in lines) {
	graphics.moveTo(line[0][0], line[0][1]);
	graphics.lineTo(line[1][0], line[1][1]);
}
 
//проверка на пересечение
for (line in lines) {
	for (var subline = line+1; subline < lines.length; subline++)
	{	
		var Ca = (lines[subline][1][0]-lines[subline][0][0])*( lines[line][0][1]-lines[subline][0][1]) - (lines[subline][1][1]-lines[subline][0][1])*(lines[line][0][0]-lines[subline][0][0]);
		var Cb = (lines[line][1][0]-lines[line][0][0])*(lines[line][0][1]-lines[subline][0][1]) - (lines[line][1][0]-lines[line][0][1])*(lines[line][0][0]-lines[subline][0][0]);
		var Z = (lines[subline][1][1]-lines[subline][0][1])*(lines[line][1][0]-lines[line][0][0]) - (lines[subline][1][0]-lines[subline][0][0])*(lines[line][1][0]-lines[line][0][1]);
		if (Z != 0) 
		{
			var Ua = Ca/Z;
			var Ub = Cb/Z;
			if ((Ua>0) && (Ua<1) && (Ub>0) && (Ub<1) )
			{
				trace("Пересекается прямая ", lines[line], " с прямой ", lines[subline]);
				return;//если надо найтим все пересечения, return убираем
			}
		}
	}
}
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
А я массив пауков составил)))) там в нужных местах рандома добавить осталось
Код AS3:
public class NewClass
	{
		private var spiders:Vector.<Vector.<Spider>> = new Vector.<Vector.<Spider>>(2, true);
		public function NewClass() 
		{
			spiders[0] = new Vector.<Spider>();
			for (var j:int = 0; j < 10; j++){
				spiders[0].push(new Spider());
			}
 
			spiders[1] = new Vector.<Spider>();
			for (j = 0; j < 20; j++) {
				spiders[1].push(new Spider());
			}
 
			drawLines();
		}
 
		private function drawLines():void {			
			//соединяем второй круг
			var i:int = 0;
			while (i < spiders[1].length) 
			{
				spiders[1][i].connects.push(spiders[1][i+1])
			}
			spiders[1][spiders[1].length - 1].connects.push(spiders[1][0]);
 
			//проводим линии от первого круга до второго
			i = 0;
			var j:int = 0;
			var count:int;
			var startNext:int = 0 // это наш минимальный индекс паука во втором ряду
 
			while (i < spiders[0].length) {//проходим по всем паукам первого круга
				spiders[0][i].connects.push(spiders[0][i+1])
 
				var count = Math.round(Math.random() * (spiders[1][spiders[1].length - 1])) //устанавливаем максимальное количество соединений
 
				for (j = startNext ; j < startNext + count && j < spiders[1].length ; j ++ ) {//j не должна начинаться раньше последнего разрешенного индекса, j не должна увеличиться больше чем на count j не должна првысить допустимое количество элементов в массиве
					spiders[0][i].connects.push(spiders[1][j]);
				}
				startNext = j + 1;
			}
                        spiders[0][spiders[0].length - 1].connects.push(spiders[0][0]);		
		}		
	}
 
	public class Spider
	{
 
		public function Spider() {
			var connects:Vector.<Spider> = new Vector.<Spider>();
		}
 
	}


Последний раз редактировалось Dukobpa3; 02.12.2010 в 12:04. Причина: Провтыкал последнего паука в первом круге связать с первым.
Старый 02.12.2010, 11:49
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 15  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Надо теперь еще дизайнера сюда =)
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Могу озвучку подогнать)))

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

Регистрация: Dec 2010
Адрес: Воронеж
Сообщений: 26
Отправить сообщение для Aber с помощью ICQ
Ох как тема развилась!!!! Не ожидал такого!
Дизайнера я нашол, только у неё сейчас времени нет, сессия на носу.

Добавлено через 7 минут
leofit
Спасибо за доработку. Я AS3 изучаю всего 3 дня, и код у меня корявый получается. А у вас прям ничего лишнего.

Пробовал свой код проверки внедрить, чтот-он не то показывает((((
Вот ссылка, я перезалил.
http://uwww.narod.ru/pauk.html

Добавлено через 10 минут
Dukobpa3
Спасибо за код, приму на заметку. Но пока он для меня сложноват.

Старый 02.12.2010, 13:45
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 18  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Код AS3:
чтот-он не то показывает((((
А по-моему всё он там то показывает.
Только нужно учесть ситуацию когда линии сходятся встык.

В таких ситуациях он показывает стык как два пересечения. (могу ошибаться, но выводы по нескольким сеансам сделал.)

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

Регистрация: Dec 2009
Сообщений: 428
2 Aber
Код проверки в моем коде - это и есть Ваш код проверки, только измененный под цикл, что бы можно было много линий сразу считать
2 Dukobpa3
А как это "встык"? Что то не могу воспроизвести
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 02.12.2010, 15:04
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 20  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Забавная идея, только слишком уж просто игра "проходится", может на большем количестве узлов будет посложнее.
__________________
trace("Остановите Землю, я сойду!!!");

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

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

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


 


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


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