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

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

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

Регистрация: Sep 2012
Сообщений: 8
По умолчанию Площадь пересечения произвольных фигур

Здравствуйте!
Ситуация: есть некоторый графический объект, например квадрат:
Код AS3:
var square:Shape = new Shape();
для него в качестве маски применяется другой графический объект, пусть это будет звезда:
Код AS3:
var star:Sprite = new Sprite();
square.mask = star;
Звезда может как лежать внутри квадрата, так и просто пересекаться с ним (или вообще не пересекаться).
Задача - определить площадь этого пересечения (например, определить, что звезда "покрывает" квадрат на 90%). Подскажите, в какую сторону копать?

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

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Если фигуры действительно произвольные, то getPixel\getPixel32\getPixels
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Ну как всегда, два пути, аналитический и фактический.
Первое. Т.к. вы знаете что вы нарисовали(а вы знаете раз нарисовали) то и площадь подсчитать можно почти всегда, исключения составляют всякие фракталы и прочие не особо интересующие нас вещи.

И фактический, это взять оба накладываемых изображения, растеризовать, и попиксельно проверить значения цветов в каждой точне, ну и по цветам понять что и как. Или посчитать количество ненулевых пикселей маскированного объекта.
__________________
:)

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

Регистрация: Jun 2008
Сообщений: 205
Копать в сторону http://active.tutsplus.com/tutorials...-pixel-colors/ - т е оценки площади пересечения получившейся

Старый 05.09.2012, 19:08
olegpon3 вне форума Посмотреть профиль Отправить личное сообщение для olegpon3 Найти все сообщения от olegpon3
  № 5  
Ответить с цитированием
olegpon3

Регистрация: Sep 2012
Сообщений: 8
Цитата:
Первое. Т.к. вы знаете что вы нарисовали(а вы знаете раз нарисовали)
Не подойдет, я представил упрощенный пример, реально объект Shape будет рисовать пользователь.
Цитата:
Или посчитать количество ненулевых пикселей маскированного объекта
Вот это интересная идея, буду пробовать, спасибо.

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
реально объект Shape будет рисовать пользователь.
Не оправдание. У вас есть вся информация достаточно точно описывающая фигуру. И т.к. по этой информации фигура и е положение однозначно определены, все площади вы можете аналитически посчитать. Вопрос в затратах. Тем более пользователь не может нарисовать на конечной площади кривых бесконечной длины и кривизны, что существенно упрощает задачу.
__________________
:)

Старый 05.09.2012, 19:32
olegpon3 вне форума Посмотреть профиль Отправить личное сообщение для olegpon3 Найти все сообщения от olegpon3
  № 7  
Ответить с цитированием
olegpon3

Регистрация: Sep 2012
Сообщений: 8
Цитата:
У вас есть вся информация достаточно точно описывающая фигуру. И т.к. по этой информации фигура и е положение однозначно определены, все площади вы можете аналитически посчитать.
Согласен, теоретически можно... Рисоваться пользователем будет линия, координаты которой привязаны к mouseX, mouseY. Но такой расчет мне кажется пока очень сложным, оставлю этот вариант запасным, пока попробую посчитать число пикселей.
update
Всем спасибо за подсказки, получилось.
Код AS3:
var e:uint=0; 
brush.mask=bigMaskArrey[previousValue];					
var bd:BitmapData=new BitmapData(900,900,true,0);
bd.draw(brush);
for(var q:uint=0;q<900;q+=10)
{
	for(var w:uint=0;w<900;w+=10)
	{
		if(bd.getPixel32(w,q)!=0) e++;
	}
}
Убедился, что если объект закрыт маской и мы "передаем" его в BitmapData, то сумма его непрозрачных пикселей ограничивается площадью маски.


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

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

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


 


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


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