Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм слияния контуров

446
19 октября 2013 года
Meander
487 / / 04.09.2011
Здравствуйте!
Возникла необходимость реализовать мультик элементами которого являются замкнутые линии (контуры каких то объектов). Эти контуры движутся друг относительно друга и когда сталкиваются должны плавно сливаться. Примерно так это должно выглядеть при раскадровке:

В какую сторону копать, для реализации такого поведения?
Свои соображения сводятся к тому, чтобы реализовать дерево, корнем которого будет вся сцена в целом. Листья дерева - координаты и формы отдельных элементарных контуров. При слиянии будет удаляться некий узел, а лист которому он принадлежал будет добавляться к листу большего контура (или будут удалены оба узла и создан новый с листом состоящим из предыдущих). То-есть вот этот алгоритм вызывает трудности.
  • Вопрос об архитектуре программы (классы, паттерны) или о способах отрисовки? от sadovoya, 19 октября 2013 года
414
19 октября 2013 года
CassandraDied
763 / / 24.05.2012
Почему нельзя просто перекрашивать сегменты круга в белый цвет?..
446
19 октября 2013 года
Meander
487 / / 04.09.2011
Если так сделать, то будет виден резкий переход от прямой к оставшейся части круга, а на самом деле прямая и окружность должны быть соединены сегментом окружности для обеспечения гладкости соединения линий. Хотя так как Вы сказали тоже можно (я понял идею). Однако, как узнать в каком месте должен быть разрыв? Решать систему уравнений для получения точек пересечения не получится, так как контуры по большей часть сложной формы, которую я не смогу задать аналитически.

Все контуры я хотел бы реализовать как полигоны с числом узлов достаточным для обеспечения плавности изгибов.
446
19 октября 2013 года
Meander
487 / / 04.09.2011
Для sadovoya в общем вопрос и об архитектуре и об отрисовке.
326
19 октября 2013 года
sadovoya
757 / / 19.11.2005
Для отрисовки я бы взял библиотеки, поддерживающие контура и логические операции над ними. А архитектура будет зависеть от выбора библиотеки. Одно дело Qt и все ООП, другое - OpenGL и его низкоуроовневость.. Язык то какой используете?
446
19 октября 2013 года
Meander
487 / / 04.09.2011
Цитата: sadovoya
Для отрисовки я бы взял библиотеки, поддерживающие контура и логические операции над ними. А архитектура будет зависеть от выбора библиотеки. Одно дело Qt и все ООП, другое - OpenGL и его низкоуроовневость.. Язык то какой используете?


Язык C++.
То-есть в Qt и в OpenGL есть поддержка операций над контурами?

414
19 октября 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: sadovoya
Для отрисовки я бы взял библиотеки, поддерживающие контура и логические операции над ними.


А такие есть?

326
19 октября 2013 года
sadovoya
757 / / 19.11.2005
Насколько помню и в Qt и в OpenGL. Название Path, если не путаю. Даже в Gdi должно быть.
CassandraDied, в .Net такого случаем нет?
326
19 октября 2013 года
sadovoya
757 / / 19.11.2005
Взгляните, не это ли надо.

A painter path is an object composed of a number of graphical building blocks (such as rectangles, ellipses, lines, and curves), and can be used for filling, outlining, and clipping. The main advantage of painter paths over normal drawing operations is that complex shapes only need to be created once, but they can be drawn many times using only calls to QPainter::drawPath().

Я бы выбрал Qt.
446
19 октября 2013 года
Meander
487 / / 04.09.2011
Цитата: sadovoya
Взгляните, не это ли надо.


Надо будет разобраться, спасибо.

89K
19 октября 2013 года
kirill222000
2 / / 19.10.2013
спасибо буду пытаться разбираться
326
19 октября 2013 года
sadovoya
757 / / 19.11.2005
Есть в Qt мало мне известная тема "анимация свойств". Видимо тоже пригодится.
414
20 октября 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: sadovoya
CassandraDied, в .Net такого случаем нет?


Не знаю. Как-то никогда не приходило в голову работать с графикой через .NET. :)

Я бы вообще такую задачу над примитивами решал с помощью ООП, не используюя средств QT, GLUT, GDI и прочих подобных плюшек, потому что очевидна возможность появления какой-то нестандартной ситуации, которую не удастся решить существующими заготовками, придётся всё равно писать руками алгоритмы, работающие с массивом если не точек, то векторов.
Хороший вариант — работа с движком. Таким, как, например, unity или cryengine, или unrealengine. Для них гораздо больше вероятность, что такие плюшки уже реализованы.

341
20 октября 2013 года
Der Meister
874 / / 21.12.2007
Вам нужно булево объединение кривых (например, CGAL)
446
20 октября 2013 года
Meander
487 / / 04.09.2011
Цитата: Der Meister
Вам нужно булево объединение кривых (например, CGAL)


Спасибо, но все-таки не булево. Для наглядности приведу пример. Видели наверно капельки масла на поверхности горячего супа. Если под капельками подразумевать, только, их контур, то должна происходить трансформация этих кривых при слипании и разделении. И эта трансформация не ограничивается булевыми операциями.

326
20 октября 2013 года
sadovoya
757 / / 19.11.2005
А если к булевым операциям добавить увеличение диаметра каждой капли при их слиянии (с условием сохранения суммарной площади)?



Конечно это слишком упрощенный взгляд на вещи, реальная физическая картина гораздо сложней. Все зависит от того, какая степень достоверности требуется при моделировании.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог