|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.08.2010, 22:58 | #1 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 1 пиксель.
Может кто делал такое и может помочь с алгоритмом? У меня пока только одно на уме: вычислять расстояние от крайних пикселей и делить на 2, при чем пиксели должны располагаться перпендикулярно, не знаю как объяснить... (Опечатка в названии темы: Сделать не линиИ, а линиЮ (одну) из одной толстой)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
|
28.08.2010, 10:14 | #2 | |
Ещё не
Форумчанин
Регистрация: 04.01.2010
Сообщений: 517
|
Цитата:
Воображение важнее, чем знания. (Albert Einstein)
|
|
28.08.2010, 10:37 | #3 |
Пользователь
Регистрация: 11.10.2009
Сообщений: 29
|
Не очень понял, что Вам нужно, наверно Вам нужно использовать алгоритм Брезенхэма.
Что в гугле попалось: http://plagiata.net.ru/?p=277 |
28.08.2010, 11:28 | #4 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Вот собственно, что мне нужно сделать есть во вложении. Алгоритм Брезенхэма - это не то, это - просто прямая линия, я её и без это алгоритма нарисую. dmitriegorovih, если бы можно было бы таким образом выйти из ситуации... всё сложнее.
П.С. Забыл касательную начертить.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
Последний раз редактировалось ImmortalAlexSan; 28.08.2010 в 11:32. |
28.08.2010, 12:14 | #5 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
итеративно
если 9 (сама точка и все соседи вверх внизвправовлево) черные(цветной) то оставить точку черной иначе стереть цвет нагядно это будет так аккуратно по одному пикселю стираем все граничные точки рисунка получаем новый рисунок с чуть более тонкими линиями повторяем с новым рисунком до тех пор пока есть что стирать. немного ( на число пикселей = 2 * количество итераций ) уменьшиться максимальная длина линии (торцевые границы линии тоже будут подвержены стиранию) не совсем понятно как будет вести себя алгоритм по изломах и поворотах (могу предположить остануться утолщения)
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 28.08.2010 в 12:22. |
28.08.2010, 12:36 | #6 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Думаю, для начала нужно получить контур жирной линии. Для этого необходимо с каким-то шагом найти ее граничные точки
1.jpg Далее обводим эти точки с помощью spline (http://ru.wikipedia.org/wiki/Сплайн) 2.jpg Находим средние точки 3.jpg И так же обводим их по сплайну 4.jpg |
28.08.2010, 12:39 | #7 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Цитата:
|
||
28.08.2010, 12:50 | #8 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
evg_m, идея интересная! Только вот нужно доработать... Если у нас останется горизонтальная линия шириной один пиксел, и программа дальше будет проверять соседей, то и этот один пиксел сотрется... Нужно каким-то образом определить направление линии, задать вектора что ли по которым программа будет ориентироваться в направлении... Sibedir, вашего ответа нарисовал на бумаге точно такие же рисунки. Мы по этому алгоритму как бы преобразуем округлые части линии в нечто прямое (прямой сплайн), дабы провести касательную к нему (он сам может и являться этой касательной), и далее по алгоритму. Объясните мне пожалуйста как правильно заливать рисунки, я сейчас покажу наглядно какая идея мне ещё пришла в голову. Они очень похожи будут с вашей, Sibedir.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
|
28.08.2010, 12:57 | #9 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
В расширеном режиме нажимаем на скрепку. Заливаем вложения (*.jpg). Далее с помощью этой же скрепки вставляем ваши картинки в нужное место поста.
Кстати, можно не искать косательные. Можно прости искать ближайшую точку контура на противоположной стороне. Последний раз редактировалось Sibedir; 28.08.2010 в 13:00. |
28.08.2010, 13:22 | #10 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Программно вычисляем местоположение точек на границе жирной линии так, чтобы относительно центра начала линии их количество было одинаковое (а началом линии является либо одна вершина, если жирная линия острая и с неравномерной толщиной, либо вершина при делении расстояния длины прямой части начала жирной линии на 2). Шаг соблюсти не получится, так что надо как-то выйти из этого положения. Вопрос: как?
1px.jpg После того, как нашли точки соединяем их да банальным LineTo(...); так как рисуется это всё дело на канве, соединяем ближайшие противоположные точки и центры получившихся отрезков. Получаем следующее: 1px копия.jpg Потом просто сглаживаем острые углы на получившейся ломанной линии с помощью опять-таки алгоритма который надо придумать: 1px копия2.jpg Почти тоже самое, что и у вас, Sibedir, поправьте, если что-то не так.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
Последний раз редактировалось ImmortalAlexSan; 28.08.2010 в 13:25. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прорисовка линии | dmitriegorovih | Общие вопросы Delphi | 13 | 16.07.2010 13:09 |
Линии в паскаль | Кинива | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 13.06.2010 12:27 |
Очистка линии | женя2010 | Microsoft Office Excel | 8 | 21.04.2010 10:19 |
динамические линии | DIMEDROL1985 | Помощь студентам | 2 | 24.01.2010 00:37 |
Как сделать рамку толщиной 0,5 см | Syltan | Microsoft Office Word | 0 | 14.11.2009 15:57 |