![]() |
2GFreemen
Чем тебя не устраивает работа метода beginFill? Код AS3:
|
Угу, и чего будем заливать у пяти пересекающихся кругов и трех линий вашим drawCircle?
|
Цитата:
Добавлено через 3 минуты Цитата:
|
Сама формулировка вопроса -= "заливка векторной фигуры" - неверна :) Залить можно растр по факту его существования, а в векторе это параметр рисования во время его рисования :) Что вы заливать то хотите? Не нарисованную фигуру? :D
|
GFreemen, чтобы определить, находится ли точка внутри векторной фигуры, нужно саму фигуру разбить на треугольники и для каждого треугольника определить, находится ли точка внутри него. Последнее делается очень просто (с помощью векторного произведения), см. пример: http://www.blackpawn.com/texts/pointinpoly/default.html
|
Вложений: 2
2Obi
Код AS3:
2dump13 Проще разбить фигуру на отрезки, построить вектор из точки. и посчитать сколько отрезков он пересек. если четное количество то мы снаружи фигуры, если нет то внутри. Картинка 2 |
а так не пробовали?
Код AS3:
|
Cпасибо всем за помощь.
отвечаю. 1. что такое "заливка векторной фигуры" - пользователь инструментом Линия нарисовал n линий, после этого взял инструмент Заливка и ткнул им в любой точке экрана. (если не верите что такое может быть проверьте в самом флеше - вполне реально) 2. Насчет векторной фигуры. Поьзователь все сделал по пункту 1. Как алгоритмом проверить замкнутую фигуру он нарисовал или нет? 3. Насчет четного/нечетного кол-ва пересечений. А если внутри этой фигуры будет еще одна фигура которую заливать не надо? как с ней поступать. Вот так, чем больше читал тем больше вопросов появляется. В общем тут надо привлекать не програмиста а математика. У меня же идея такая: реализовать инструмент заливка не кликом в одну точку, а чтобы пользователь ставил несколько узловых точек и по этому полигону заливать. Скажем так: дешево и сердито. А главное быстро. |
Метод BitmapData.floodFill как раз для этого подойдёт, как вам уже говорили. Рисуем линии векторно, отрисовываем всё это дело в BitmapData с помощью BitmapData.draw и далее floodFill в той точке, по которой пользователь кликнул.
|
Во флеше алгоритм по-проще. любое пересечение линий создает новые линии с концом в точке пересечения - так искать гораздо проще + легко выяснить замкнутая фигура или нет.
Т.е. пример, была у вас вертикальная линия: | и горизонтальная -- при пересечении получилось: ░░|░░ ---.--- ░░|░░ (4 отрезка) В таком случае для того, чтобы обаружить замкнутый контур нужно будет: 1. найти близжайшую линию к месту, где кликнули и следуя начало линии -> конец линии -> начало следующей линии -> и так пока либо не будет следующего начала, либо линия уже 1 раз встречалась за время перебора. В первом варианте - естественно, ничего не заливаем, во втором - у вас уже будут все нужные вам вершины для того, чтобы нарисовать многоугольник. |
| Часовой пояс GMT +4, время: 13:43. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.