Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите по части графики в С++ Builder  (Прочитано 13955 раз)
0 Пользователей и 1 Гость смотрят эту тему.
McS
Гость
« : 25-04-2005 20:13 » 

Привет ВСЕМ! Помогите с задачкой по графике в C++ Builder'е ....
В общем так! есть какая-то область для рисования. Рисуем на ней какую-нибудь произвольную фигуру, например, прям-к или окруж-ть... или еще что-нибудь (только замкнутое)! затем разбрасываем случайным образом по всей области для рисования определенное количество точек, например 500 точек (Pixels)! А теперь то, что мне нужно сделать.... Нужно посчитать сколько из этих 500 точек попали в фигуры, нарисованные на области для рисования! т.е. я так понял (может я ошибаюсь), что нужно проверять каждую из разбросанных точек на принадлежность к этим нарисованным фигурам! Помогите пожалуйста сделать такое в C++ Builder'е ....

Заранее СПАСИБО!!!
« Последнее редактирование: 19-12-2007 19:13 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-04-2005 11:54 » 

Ты данные по фигурам имееш? Если например круг, то его радиус и центр, Прямоугольник., координаты вершин прямоугольника. Если есть такие данные, то эта задача сводится к геометрии.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
McS
Гость
« Ответ #2 : 27-04-2005 10:44 » 

Finch   нет! не имею!! да если даже имею... то как тогда с случаем ПРОИЗВОЛЬНОЙ фигуры, т.е. фигура, которая рисуется произвольной линией (как бы карандашом)! тогда как тут быть с геометрией???
Записан
Alf
Гость
« Ответ #3 : 27-04-2005 10:54 » new

Правильно ли я понял задачу?

Имеется фигура произвольной формы, ограниченная некоей замкнутой кривой. Нужно узнать, принадлежит ли данная точка этой фигуре.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 27-04-2005 12:21 » 

Ты можеш хотябы выбрать из твоей области для рисования все точки? Оставить только фигуры.
Я применял два метода для решения таких задач.
Первый. Проводиш мыслено любую линию начинаюшуеся с твоей точки и до границ области. Теперь подсчитываеш точки пересечения твоей линии с точками фигур. Если на одном плече точек пересечений будет нечетное число, значит твоя точка лежит в фигуре, если четное, значит твоя точка лежит вне фигур. Есть подводные камни у этого метода, если случайно твоя линия совпадет с ребром, или вершиной фигуры, результат будет неверен.
Второй. Волновой метод. Этот метод более ресурсоемкий. Составляеш матрицу кратную по размеру с твоей областью рисования. Зануляеш матрицу. В координатах твоей точки на матрице ставиш один. Проверяеш соседей твоей точки, если там что то стоит, значит ставиш на матрице в соответствуюших координатах двойку, иначе один. И так повторяеш для каждой однерки на матрице. Естественно, координаты которые уже помечены на матрице не являются уже "соседом". Когда твоя волна столкнется с границой области рисования, значит точка не лежит ни в одной фигуре, Если ни у одной однерки не осталось соседей, но волна не столкнулась с границой, значит точка лежит внутри фигуры. Чтобы ускорить поиск для последуюших точек, в принципе результаты можно не стирать, а просто проверять на принадлежность к области.
Подводные камни для обоих методов, Кривые линии могут прорисоваться с разрывами, что может привести к неверному результату.
« Последнее редактирование: 27-04-2005 12:24 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
direktorSan
Удачи!
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 27-04-2005 13:17 » 

Насколько я понял:
1. Есть произвольная ЗАМКНУТАЯ фигура (НЕ ОБЯЗАТЕЛЬНО ПРАВИЛЬНАЯ);
2. Есть произвольный набор точек (диаметром в один пиксель);
3. Точки делятся на три категории:
   а) не принадлежат фигуре (лежат вне ее);
   б) принадлежат границе фигуры (расположены на линии границы фигуры);
   в) принадлежат фигуре (лежат внутри фигуры).

Тогда вопрос: можно ли по заданию ставить точки цветом, отличающимся от цвета линии границы фигуры?

Если да, то:
Можно использовать алгоритм заливки с затравкой для произвольной обласи.
Вкратце его суть.
Выбирается на плоскости точка (та самая затравка) и с нее начинается построчный обход плоскости до пересечения с пикселом другого цвета (нам нужен цвет границы). Сперва идем, допустим, вправо. Можем наткнуться 1. на границу фигуры или 2. на границу плоскости. Идем влево. Исходы те же самые. Здесь придется покомбинировать.
При этом если пересечение было с цветом точки => увеличиваем счетчик.
Два варианта:
1) затравка вне области. Наилучший вариант. Считаем все точки и вычитаем это количество из общего кол-ва точек.
2) затравка внутри области. Считаем все точки и проверяем цвет граничных точек (для этого алгоритм немного модифицируется).

Детальное описание алгоритма можно найти в сети.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines