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

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

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

Регистрация: Aug 2010
Сообщений: 282
По умолчанию Как отследить пересечение линий

Всем привет,
Есть код который вытаскивает из библиотеки копии мувика MC и рандомом размещает их на сцене соединяя линиями. Мувики можно таскать мышкой. Как мне отследить пересечение линий которыми соеденены эти мувики?

Код AS3:
import flash.geom.Rectangle;
 
var vsego_muvikov:Number = 4; //Количество окружностей/линий
var lines:Sprite = new Sprite();
 
this.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
 
for (var i:uint = 0; i < vsego_muvikov; i++) {
 
	var muvik:MC = new MC();
	this.addChild(muvik);
 
	muvik.buttonMode = true;
	muvik.name = "muvik" + i;
	muvik.x=50+Math.random() * 300;
	muvik.y=50+Math.random() * 200;
	trace (muvik.name+"x= "+muvik.x+", y= "+muvik.y);
 
	muvik.addEventListener(MouseEvent.MOUSE_DOWN, muvik_mouseDown);
	muvik.addEventListener(MouseEvent.MOUSE_UP, muvik_mouseUp);
}
 
 
function muvik_mouseDown(event:MouseEvent){
	event.target.startDrag(false,new Rectangle(50,50,500,300));
}
function muvik_mouseUp(event:MouseEvent){
	event.target.stopDrag();
}
 
function drawLine(event:MouseEvent):void {
 
	lines.graphics.clear();			//Очищаем поле от нарисованых линий
	lines.graphics.lineStyle(1, 0x000000);
	for (var i:uint = 0; i < vsego_muvikov; i++) {
 
		var dispObjCurr:DisplayObject = this.getChildByName("muvik" + i);
		var dispObjNext:DisplayObject = this.getChildByName("muvik" + (i+1));
		if (i == (vsego_muvikov-1)) dispObjNext = this.getChildByName("muvik0");
 
		lines.graphics.moveTo(dispObjCurr.x, dispObjCurr.y);
		lines.graphics.lineTo(dispObjNext.x, dispObjNext.y);
 
		this.addChild(lines);		//Отрисовывае линии
		//this.addChildAt(lines,0);	//Помещаем линии на самый низ
	}
}
По сути в центре каждого мувика эти линии уже пересекаются изначально.
Изображения
 

Старый 08.11.2012, 04:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А нужны именно координаты точки, или только факт пересечения? Последнее легче посчитать, если что.
__________________
Hell is the possibility of sanity

Старый 08.11.2012, 13:05
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
c c++ я уже переводил.
http://www.murmadillo.tut.su/html/li...Intersect.html
Сначала определеяется могут ли линии пересекаться, а потом если могут и если надо ищется точка пересечения.
__________________
Гоночка

Старый 08.11.2012, 14:50
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 5  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
Мне нужен именно факт пересечения, координаты точки пересечения не важны.
Но как я писал ранее получается, что линии уже изначально пересекаются (см. рис слева) поэтому по HitTest не знаю как отследить. Может что посоветуете?

Alex Lexcuk наверное это то, что надо, но не могу разобраться как применить это к моему коду - я недавно AS 3.0 изучать начал еще нифига не знаю как это все использовать.

Старый 08.11.2012, 16:04
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Мне нужен именно факт пересечения, координаты точки пересечения не важны.
Недавно узнал забавный способ определить факт пересечения _отрезков_
1. По точкам получаем 2 уравнения для 2-х прямых в канонической форме: Ax + By + C = 0;
2. Подставляем 2 точки от одного отрезка в уравнение прямой другого отрезка. Если результаты Ax + By + C имеют разные знаки - значит точки лежат по разную сторону прямой
3. Проделываем это сравнение для других 2-х точкек и второго уравнения прямой - если тоже разные знаки - значит есть пересечение.
Цитата:
Но как я писал ранее получается, что линии уже изначально пересекаются (см. рис слева) поэтому по HitTest не знаю как отследить. Может что посоветуете?
HitTest здесь вряд ли поможет.
"Боюсь нам нужно использовать...
Математику."

Старый 08.11.2012, 17:58
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Но как я писал ранее получается, что линии уже изначально пересекаются
Ну так вам же известно пересечение каких линий превратит фигуру в "сложный" многоугольник. Вам нужно попарно проверять (если у вас четырехугольник) противоположные стороны на пересечение. В таком случае пересекаются ли смежные стороны - для вас не имеет значения.
__________________
Hell is the possibility of sanity

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

Теги
пересечение объектов
Опции темы
Опции просмотра

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

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


 


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


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