Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.10.2017
Сообщений: 3

Поиск замкнутого контура для заливки

10.01.2012, 11:16. Показов 3433. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишется "векторный графический редактор"... От части велосипед, но нужен...
Все примитивы раскладываем в набор отрезков (дугу, окружность и т.п.) ибо по-другому уже сил нет.
Требуется по щелчку пользователя залить область, в которую он ткнул... Так как пишется на C#, для этого нужно определить Region (ну или PathGeometry, если WPF). В общем, нужен набор отрезков из которых должен состоять контур.
На первый взгляд всё казалось простым, находили все пересечения всех объектов в double x, double y (пусть медленно, в данном случае это не играет роли), далее искали первый попавшийся объект контура правым горизонтальным лучом из точки заливки. И обходили контур вокруг точки, сворачивая на пересечениях в выбранном направлении...
Вроде бы всё работает, но есть но. Если отрезки накладываются друг на друга, получаются разные точки пересечения с другим отрезком, хотя на деле-то она должна быть одна.
Ну, например, один отрезок целиком накладывается на второй отрезок, который длиннее ( ---=====----) в итоге при пересечении с третьим отрезком у первого получается одна точка, а у второго другая, отличаются на 15ый знак double в координате. Ну, фигня, подумали мы и округлили точки пересечения до целого... Фиг там, сказала тестовая программа и нашла нам такую же точку, только координаты расходились уже не на 15ый знак double, а на 2 целых... И тут мы зашли в тупик.

Делать растровую заливку - легко, но она не даёт контура, а значит её надо высчитывать на каждый чих пользователя? (масштаб, скроллинг и т.п.), очевидно, что это не прибавит производительности в интерактиве и пользователь не сможет работать.

Вроде и задача должна быть избитая и алгоритм не могу найти никакой...
Подскажите куда по-копать... Надоело изобретать велосипед... Смотрели как работает AutoCAD и Inkscape... ОМГ... Один другого краше... Оба делают растровую заливку судя по всему, потом как-то находят её векторный контур с неким приближением... На выходе полный шлак, но алгоритм их тоже явно не простой... (Так-то не сложно, контур по растру найти, если бы не внутренние области которые надо исключать.)
Что делать и куда копать уже не понимаю совершенно...


PS. Пересечение отрезков считаем по алгоритму с http://algolist.manual.ru/math... line2d.php
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2012, 11:16
Ответы с готовыми решениями:

Построить потенциальные диаграммы для замкнутого контура
Помогите плиз со вторым заданием...как полагаю нужно найти все 6 токов из системы уравнений, а вот что потом не понимаю...первое задание...

Заливка замкнутого контура
Здравствуйте! Пытаюсь реализовать заливку контура. Но получаю результат, объяснить который не могу. Вот на таком изображении Matlab...

Вычерчивание замкнутого контура (звезда)
Помогите найти ошибку в коде. Звезда не замыкается :( unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2012, 11:16
Помогаю со студенческими работами здесь

Касательная в точке замкнутого контура на плоскости
Ребят, у меня есть замкнутый контур фигуры на плоскости, представленный упорядоченными точками с координатами x и y (p(x,y)). Мне нужно...

Заданная правая половина симметричного замкнутого базового контура
Заданная правая половина симметричного замкнутого базового контура и линия произвольного расположения, определить замкнутый контур, который...

Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши
Можете сделать готовый проект? Пожалуйста, разбираться времени нету, а домашнее задание сдать нужно ;) unit Stars_; interface uses ...

Нужно доказать, что работа замкнутого контура равна нулю
Очень нужна помощь

Алгоритм рекурсивной заливки произвольного контура
Ребят, всем привет! Есть следующий код. По идее это алгоритм рекурсивной заливки, но я не могу понять какие значения необходимо вписывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru