|
|
|||||
2GFreemen
Чем тебя не устраивает работа метода beginFill? |
|
|||||
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Угу, и чего будем заливать у пяти пересекающихся кругов и трех линий вашим drawCircle?
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
Цитата:
Добавлено через 3 минуты Собственно говоря заливать-то beginFill-ом и буду, но, как правильно сказал Obi, надо же знать, что заливать... |
|
|||||
Регистрация: Nov 2005
Сообщений: 1,155
|
Сама формулировка вопроса -= "заливка векторной фигуры" - неверна Залить можно растр по факту его существования, а в векторе это параметр рисования во время его рисования Что вы заливать то хотите? Не нарисованную фигуру?
|
|
|||||
Регистрация: Apr 2009
Сообщений: 30
|
GFreemen, чтобы определить, находится ли точка внутри векторной фигуры, нужно саму фигуру разбить на треугольники и для каждого треугольника определить, находится ли точка внутри него. Последнее делается очень просто (с помощью векторного произведения), см. пример: http://www.blackpawn.com/texts/pointinpoly/default.html
|
|
|||||
2Obi
graphics.lineStyle(1,0x0); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(100,100,100); graphics.drawCircle(150,100,100); graphics.drawCircle(100,150,100); graphics.drawCircle(100,200,100); graphics.drawCircle(120,150,100); graphics.endFill(); graphics.lineStyle(1,0x0); graphics.beginFill(0xFF0000,0.5); graphics.moveTo(250,250); graphics.lineTo(250,350); graphics.lineTo(290,380); graphics.lineTo(210,250);; graphics.endFill(); 2dump13 Проще разбить фигуру на отрезки, построить вектор из точки. и посчитать сколько отрезков он пересек. если четное количество то мы снаружи фигуры, если нет то внутри. Картинка 2 |
|
|||||
а так не пробовали?
graphics.lineStyle(1,0x0); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(100,100,100); graphics.endFill(); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(150,100,100); graphics.endFill(); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(100,150,100); graphics.endFill(); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(100,200,100); graphics.endFill(); graphics.beginFill(0xFF0000,0.5); graphics.drawCircle(120,150,100); graphics.endFill();
__________________
я могу стать всем, если только захочу |
|
|||||
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
Cпасибо всем за помощь.
отвечаю. 1. что такое "заливка векторной фигуры" - пользователь инструментом Линия нарисовал n линий, после этого взял инструмент Заливка и ткнул им в любой точке экрана. (если не верите что такое может быть проверьте в самом флеше - вполне реально) 2. Насчет векторной фигуры. Поьзователь все сделал по пункту 1. Как алгоритмом проверить замкнутую фигуру он нарисовал или нет? 3. Насчет четного/нечетного кол-ва пересечений. А если внутри этой фигуры будет еще одна фигура которую заливать не надо? как с ней поступать. Вот так, чем больше читал тем больше вопросов появляется. В общем тут надо привлекать не програмиста а математика. У меня же идея такая: реализовать инструмент заливка не кликом в одну точку, а чтобы пользователь ставил несколько узловых точек и по этому полигону заливать. Скажем так: дешево и сердито. А главное быстро. |
|
|||||
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Метод BitmapData.floodFill как раз для этого подойдёт, как вам уже говорили. Рисуем линии векторно, отрисовываем всё это дело в BitmapData с помощью BitmapData.draw и далее floodFill в той точке, по которой пользователь кликнул.
|
|
|||||
Modus ponens
|
Во флеше алгоритм по-проще. любое пересечение линий создает новые линии с концом в точке пересечения - так искать гораздо проще + легко выяснить замкнутая фигура или нет.
Т.е. пример, была у вас вертикальная линия: | и горизонтальная -- при пересечении получилось: ░░|░░ ---.--- ░░|░░ (4 отрезка) В таком случае для того, чтобы обаружить замкнутый контур нужно будет: 1. найти близжайшую линию к месту, где кликнули и следуя начало линии -> конец линии -> начало следующей линии -> и так пока либо не будет следующего начала, либо линия уже 1 раз встречалась за время перебора. В первом варианте - естественно, ничего не заливаем, во втором - у вас уже будут все нужные вам вершины для того, чтобы нарисовать многоугольник.
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 22:36. |
|
« Предыдущая тема | Следующая тема » |
|
|