Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сглаживание кривых 
:(
    Опции темы
Семен
  Дата 4.5.2002, 23:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, поможите пожалуйста.
Нужен такой алгоритм:
Когда мышой рисуешь, линии кривые, угловатые, ну и т.п. Нужно чтобы программа на лету (можно с небольшим запаздыванием) сглаживала мелкие неровности рисуемой линии. Нужен максимально простой и быстрый алгоритм.

Буду очень благодарен за помошь.
  Вверх
neutrino
Дата 5.5.2002, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Опиши по подробнее что сделать нужно... Чтобы углы округлялись?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex101
Дата 5.5.2002, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Guest @ 05.5.2002, 00:34)
сглаживала мелкие неровности

А что понимать под "мелкими неровностями"?


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Семен
Дата 5.5.2002, 12:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну вот, например, откройте Paint и попробуйте в нем нарисовать мышкой волну. Линия получается шорохованая, не гладкая, появляются мелкие пиксельные выступы. Вот от этого и надо избавиться. И именно не антиалайзингом (его быть не должно), а сглаживанием пиксельно линии.

Тоесть надо сглаживать не углы, а причесывать саму линию.

Есть идеи?  :rolleyes
  Вверх
Chingachguk
Дата 6.5.2002, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 18



Делай обычный сплайн. Приближай многочленами свою кривую и перерисовывай ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 6.5.2002, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Chingachguk, а что такое сплайн? Я бы предложил проводить параболы...


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex101
Дата 6.5.2002, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Guest @ 05.5.2002, 13:50)
Тоесть надо сглаживать не углы, а причесывать саму линию.

Есть идеи?  :rolleyes

Так тогда надо просто линию рисовать
Но это только для прямых...


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Chingachguk
Дата 6.5.2002, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 18



Сплайн - то же приближение кривой известной функцией(функциями) - слово ко мне из excel-я приклеилось :)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 6.5.2002, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



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


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 6.5.2002, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 18



А чтобы функция была однозначной на интервале, видимо ;)

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


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Alex101
Дата 6.5.2002, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(neutrino @ 06.5.2002, 14:34)

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


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Vit
Дата 6.5.2002, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Я бы не занимался приближением к каким-то параболам. Надо принять что на достаточно малом отрезке кривая приближается к прямой и работать с отрезком. Далее допустим у нас есть точки A, B, C, D - это точки лежащие достаточно близко на кривой, причем по оси абсцисс координаты этих точек возрастают от A ->D(пока примем это для простоты, в дальнейшем можно добавить решение для других вариантов тоже). Теперь берем точки A и C, по их координатам интерполируем точку B' (линейная интерполяция - так как точки очень близки друг к другу будем считать AB, BC, CD отрезками). Сравниваем интерполируемую  точку B' с реальной B:

Совпадают? - идем дальше.
Не Совпадают - смещаем точку B на (например) средину расстояния B'B. (или смещаем с каким нибудь коэффициентом - например кладем на 1/5 от ожидаемого положения).

Повторяем это по всей прямой. При достаточно аккуратном подборе коэффициентов смещения и длинны отрезков получаем сглаженность нужной степени.

Можно сделать примерно то же самое только сравнивать не координаты точек а производную на каждом таком элементарном отрезке... Это будет только чуть-чуть сложнее, но я не могу себе пока представить даст ли это какой-либо выигрышь по сравнению с первым вариантом.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Alex101
Дата 7.5.2002, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Vit @ 06.5.2002, 19:18)

А ежели брать три точки и строить дугу окружности?
Причем точки выбирать такие, чтобы было максимальное отклонение от прямой на каком-то отрезке...
Ведь по трем точкам легко найти центр окружности, описанной вокруг треугольника...
А затем уже "сглаживать" соединения дуг


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Vit
Дата 7.5.2002, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Можно и круги, и многочлен ...надцатого порядка, а зачем? Все равно есть физический предел - разрешение монитора, вот и уменьши расстояние между точками чтобы можно было считать их отрезком. Впрочем если хочется сделать сложнее и запутаннее -  я не против, я высказал свое мнение. По мне легче вместо трех точек взять 10 и считать их отрезками, чем приближать к кругу, кстати а почему круг? Чем порабола не угодила или гипербола или может овал надо брать?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 7.5.2002, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Цитата(Alex101 @ 07.5.2002, 07:51)
А затем уже "сглаживать" соединения дуг

Кстати, ты привел задачу к другой задаче, это не совсем решение


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.