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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.09.2009, 01:55
MoHaX вне форума Посмотреть профиль Отправить личное сообщение для MoHaX Найти все сообщения от MoHaX
  № 11  
Ответить с цитированием
MoHaX
 
Аватар для MoHaX

Регистрация: Aug 2004
Сообщений: 422
Отправить сообщение для MoHaX с помощью ICQ
2GFreemen
Чем тебя не устраивает работа метода beginFill?

Код AS3:
graphics.beginFill(0xFF0000,0.5);
graphics.drawCircle(10,10,10);
graphics.endFill();

Старый 20.09.2009, 09:23
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 12  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Угу, и чего будем заливать у пяти пересекающихся кругов и трех линий вашим drawCircle?
__________________
#flasher@irc.trg.ru:6667

Старый 20.09.2009, 11:23
GFreemen вне форума Посмотреть профиль Отправить личное сообщение для GFreemen Найти все сообщения от GFreemen
  № 13  
Ответить с цитированием
GFreemen
 
Аватар для GFreemen

Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
Цитата:
Сообщение от Dimax4d Посмотреть сообщение
Можно рисовать векторно, отобразить это все в BitmapData, а потом залить на ней и сделать эту BitmapData как подложку
Cпасибо за совет. Продумаю эту тему...

Добавлено через 3 минуты
Цитата:
Сообщение от MoHaX Посмотреть сообщение
2GFreemen
Чем тебя не устраивает работа метода beginFill?

Код AS3:
graphics.beginFill(0xFF0000,0.5);
graphics.drawCircle(10,10,10);
graphics.endFill();
Собственно говоря заливать-то beginFill-ом и буду, но, как правильно сказал Obi, надо же знать, что заливать...

Старый 20.09.2009, 12:22
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 14  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Сама формулировка вопроса -= "заливка векторной фигуры" - неверна Залить можно растр по факту его существования, а в векторе это параметр рисования во время его рисования Что вы заливать то хотите? Не нарисованную фигуру?

Старый 20.09.2009, 13:06
dump13 вне форума Посмотреть профиль Отправить личное сообщение для dump13 Найти все сообщения от dump13
  № 15  
Ответить с цитированием
dump13

Регистрация: Apr 2009
Сообщений: 30
GFreemen, чтобы определить, находится ли точка внутри векторной фигуры, нужно саму фигуру разбить на треугольники и для каждого треугольника определить, находится ли точка внутри него. Последнее делается очень просто (с помощью векторного произведения), см. пример: http://www.blackpawn.com/texts/pointinpoly/default.html

Старый 20.09.2009, 20:46
MoHaX вне форума Посмотреть профиль Отправить личное сообщение для MoHaX Найти все сообщения от MoHaX
  № 16  
Ответить с цитированием
MoHaX
 
Аватар для MoHaX

Регистрация: Aug 2004
Сообщений: 422
Отправить сообщение для MoHaX с помощью ICQ
2Obi
Код AS3:
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();
получиться то что в картинке 1.

2dump13
Проще разбить фигуру на отрезки, построить вектор из точки. и посчитать сколько отрезков он пересек. если четное количество то мы снаружи фигуры, если нет то внутри.
Картинка 2
Изображения
   

Старый 21.09.2009, 10:36
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 17  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
а так не пробовали?
Код AS3:
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();
__________________
я могу стать всем, если только захочу

Старый 22.09.2009, 23:46
GFreemen вне форума Посмотреть профиль Отправить личное сообщение для GFreemen Найти все сообщения от GFreemen
  № 18  
Ответить с цитированием
GFreemen
 
Аватар для GFreemen

Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
Cпасибо всем за помощь.
отвечаю.
1. что такое "заливка векторной фигуры" - пользователь инструментом Линия нарисовал n линий, после этого взял инструмент Заливка и ткнул им в любой точке экрана. (если не верите что такое может быть проверьте в самом флеше - вполне реально)
2. Насчет векторной фигуры. Поьзователь все сделал по пункту 1. Как алгоритмом проверить замкнутую фигуру он нарисовал или нет?
3. Насчет четного/нечетного кол-ва пересечений. А если внутри этой фигуры будет еще одна фигура которую заливать не надо? как с ней поступать.

Вот так, чем больше читал тем больше вопросов появляется. В общем тут надо привлекать не програмиста а математика.
У меня же идея такая: реализовать инструмент заливка не кликом в одну точку, а чтобы пользователь ставил несколько узловых точек и по этому полигону заливать.
Скажем так: дешево и сердито. А главное быстро.

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

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Метод BitmapData.floodFill как раз для этого подойдёт, как вам уже говорили. Рисуем линии векторно, отрисовываем всё это дело в BitmapData с помощью BitmapData.draw и далее floodFill в той точке, по которой пользователь кликнул.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Во флеше алгоритм по-проще. любое пересечение линий создает новые линии с концом в точке пересечения - так искать гораздо проще + легко выяснить замкнутая фигура или нет.

Т.е. пример, была у вас вертикальная линия: | и горизонтальная -- при пересечении получилось:
░░|░░
---.---
░░|░░
(4 отрезка)
В таком случае для того, чтобы обаружить замкнутый контур нужно будет:
1. найти близжайшую линию к месту, где кликнули и следуя начало линии -> конец линии -> начало следующей линии -> и так пока либо не будет следующего начала, либо линия уже 1 раз встречалась за время перебора.
В первом варианте - естественно, ничего не заливаем, во втором - у вас уже будут все нужные вам вершины для того, чтобы нарисовать многоугольник.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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