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

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

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

Регистрация: Jul 2006
Сообщений: 89
Отправить сообщение для Idalgo с помощью ICQ
Question Алогиритм inset/outset (inflate) bezier

Приветствую!

Разыскивается алгоритм создания паралельных кривых. Исходные данные - замкнутая кривая Безье, необходимо получить кривую, отстоящую от исходной на заданое расстояние.
В результате должна быть также замкнутая кривая Безье без "петель".

Аналогичный инструмент в иллюстраторе называется inflate, в inkscape - inset

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

Старый 10.02.2012, 20:51
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
http://code.google.com/p/bezier/ пожалуй единственные изыскания в данной области

Старый 10.02.2012, 22:04
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
довольно легко разруливается вариант со сплайном Катмулла-Рома http://silin.su/trash/spline/bin/
такая ли параллельность и точность нужна и для чего это уже другой вопрос
и еще с петлями там не всегда хорошо

Старый 10.02.2012, 22:22
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 4  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
А кривая безье у вас по опорным точкам задана? Расстояние как мерять будем меж кривыми, по нормали в точке? В какой точке, на первоначальной кривой или на итоговой? Просто масштабировать ключевые точки и получить подобную фигуру меньшего размера вам не подходит?
__________________
:)

Старый 11.02.2012, 01:26
Idalgo вне форума Посмотреть профиль Отправить личное сообщение для Idalgo Найти все сообщения от Idalgo
  № 5  
Ответить с цитированием
Idalgo

Регистрация: Jul 2006
Сообщений: 89
Отправить сообщение для Idalgo с помощью ICQ
Цитата:
Сообщение от silin Посмотреть сообщение
довольно легко разруливается вариант со сплайном Катмулла-Рома http://silin.su/trash/spline/bin/
такая ли параллельность и точность нужна и для чего это уже другой вопрос
и еще с петлями там не всегда хорошо
Интересный вариант, но в моем случае думаю не подойдет.
Расстояние между кривыми неодинаковое даже при выпуклом контуре.
Но спасибо за полезный пример. Можно применить для сглаживания контуров многоугольников.

Добавлено через 14 минут
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
А кривая безье у вас по опорным точкам задана? Расстояние как мерять будем меж кривыми, по нормали в точке? В какой точке, на первоначальной кривой или на итоговой? Просто масштабировать ключевые точки и получить подобную фигуру меньшего размера вам не подходит?
Кривая задана опорными точками. Расстояние меряем по нормали в опорных точках на первоначальной кривой.
Просто масштабирование не подойдет, возможно было бы масштабировать каждый отрезок кривой, но как тогда соединить отрезки итоговой кривой и как избавиться от петель.


Последний раз редактировалось Idalgo; 11.02.2012 в 01:42.
Старый 11.02.2012, 19:04
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> Расстояние между кривыми неодинаковое даже при выпуклом контуре.
ага, но это из-за того, что в примере точки для дубля считаются абы как - просто 'расширением' от геометрического центра
если считать, отступая по нормали, то будет ровно http://silin.su/trash/spline/testSpline1.swf
но непонятки с острыми загибами и петлями остаются канеш,
хотя, имо, их все равно легче преодолеть, чем для безьевого варианта

Старый 11.02.2012, 21:24
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 7  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Кривая задана опорными точками. Расстояние меряем по нормали в опорных точках на первоначальной кривой.
Просто масштабирование не подойдет, возможно было бы масштабировать каждый отрезок кривой, но как тогда соединить отрезки итоговой кривой и как избавиться от петель.
Так безье не проходит через свои опорные точки.
В чём проблема взять какие-то точки вашей кривой, найти в них касательные если они не известны и взять нормали, по нормалям отложить требуетмое расстояние и нарисовать такую же кривую по новым точкам.

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

А вам нельзя просто численно пройтись по кривой по точкам и просчитать нормали и посторить аппроксимацию достаточной точности?
__________________
:)

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

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

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


 


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


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