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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 02.12.2010, 11:43
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 11  
Ответить с цитированием
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 убираем
			}
		}
	}
}
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

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

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


 


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


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