Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Площадь пересечения произвольных фигур (http://www.flasher.ru/forum/showthread.php?t=183931)

olegpon3 05.09.2012 18:17

Площадь пересечения произвольных фигур
 
Здравствуйте!
Ситуация: есть некоторый графический объект, например квадрат:
Код AS3:

var square:Shape = new Shape();

для него в качестве маски применяется другой графический объект, пусть это будет звезда:
Код AS3:

var star:Sprite = new Sprite();
square.mask = star;

Звезда может как лежать внутри квадрата, так и просто пересекаться с ним (или вообще не пересекаться).
Задача - определить площадь этого пересечения (например, определить, что звезда "покрывает" квадрат на 90%). Подскажите, в какую сторону копать?

ChuwY 05.09.2012 18:42

Если фигуры действительно произвольные, то getPixel\getPixel32\getPixels

Aquahawk 05.09.2012 18:43

Ну как всегда, два пути, аналитический и фактический.
Первое. Т.к. вы знаете что вы нарисовали(а вы знаете раз нарисовали) то и площадь подсчитать можно почти всегда, исключения составляют всякие фракталы и прочие не особо интересующие нас вещи.

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

shaman4d 05.09.2012 19:08

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

olegpon3 05.09.2012 19:08

Цитата:

Первое. Т.к. вы знаете что вы нарисовали(а вы знаете раз нарисовали)
Не подойдет, я представил упрощенный пример, реально объект Shape будет рисовать пользователь.
Цитата:

Или посчитать количество ненулевых пикселей маскированного объекта
Вот это интересная идея, буду пробовать, спасибо.

Aquahawk 05.09.2012 19:19

Цитата:

реально объект Shape будет рисовать пользователь.
Не оправдание. У вас есть вся информация достаточно точно описывающая фигуру. И т.к. по этой информации фигура и е положение однозначно определены, все площади вы можете аналитически посчитать. Вопрос в затратах. Тем более пользователь не может нарисовать на конечной площади кривых бесконечной длины и кривизны, что существенно упрощает задачу.

olegpon3 05.09.2012 19:32

Цитата:

У вас есть вся информация достаточно точно описывающая фигуру. И т.к. по этой информации фигура и е положение однозначно определены, все площади вы можете аналитически посчитать.
Согласен, теоретически можно... Рисоваться пользователем будет линия, координаты которой привязаны к 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, то сумма его непрозрачных пикселей ограничивается площадью маски.


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

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