RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #90 : 07-06-2010 12:40 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dale
|
|
« Ответ #91 : 07-06-2010 12:59 » |
|
я подозреваю, что у "дисплея" есть встроенная функция рисования прямых. Не факт. Я использовал в самоделках графические дисплеи DOGM132 и от Nokia 1200. И те, и другие напрочь лишены интеллекта, просто тупо засвечивают точки. Может, у старших моделей такая функция и имеется, не сталкивался. Но твердо рассчитывать на ее наличие не стоит.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
goodking
|
|
« Ответ #92 : 07-06-2010 13:28 » |
|
я подозреваю, что у "дисплея" есть встроенная функция рисования прямых.
С другой стороны если, например гистограмма рисуется в реальном времени, и нет времени на прорисовку отрезков, то заполнение проводить уже "постфактум".
Подозреваю, что просмотр "спектра" происходит в ручном режиме, т.е. есть время на прорисовку.
неет, ничего такого нет, вот ЖКИ с которым я работаю
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #93 : 07-06-2010 13:43 » |
|
goodking, достаточно было бы ссылку на контроллер Ну, нет так нет. Все равно задача упрощается. двигаясь по оси X заливать ось Y. Обыкновенный итерационный метод.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
goodking
|
|
« Ответ #94 : 07-06-2010 13:51 » |
|
goodking, достаточно было бы ссылку на контроллер Ну, нет так нет. Все равно задача упрощается. двигаясь по оси X заливать ось Y. Обыкновенный итерационный метод. да я уже понял, сижу пишу... но насчет контура-все равно интересно просто для себя, возможно ли реализовать это на МК (кстати МК SiLabs c8051F120)
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #95 : 07-06-2010 14:07 » |
|
непроверенная идея Если контур замкнутый то пересечение прямой дает четное количество точек. Заливка происходит по вертикали, затем по горизонтали вот как-то так
|
r.jpg (12.13 Кб - загружено 1748 раз.)
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dale
|
|
« Ответ #96 : 07-06-2010 14:15 » |
|
Я примерно эту идею и продвигаю в массы, только там касания могут испортить всю малину, нарушив четность.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
goodking
|
|
« Ответ #97 : 07-06-2010 14:17 » |
|
Если контур замкнутый то пересечение прямой дает четное количество точек. Заливка происходит по вертикали, затем по горизонтали а почему нельзя только по вертикали или только по горизонтали?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #98 : 07-06-2010 14:20 » |
|
...нарушить четность
Нестрашно. Надо идти до первого свободного.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #99 : 07-06-2010 14:20 » |
|
Если контур замкнутый то пересечение прямой дает четное количество точек. Заливка происходит по вертикали, затем по горизонтали а почему нельзя только по вертикали или только по горизонтали? Потому что... смотри рисунок.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #100 : 07-06-2010 14:22 » |
|
...нарушить четность
Нестрашно. Надо идти до первого свободного.
кажется спорол глупость. Я ж говорил - непровернная.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
goodking
|
|
« Ответ #101 : 07-06-2010 14:29 » |
|
вот как описан этот (насколько я понимаю) алгоритм в книжке Поэтому для решения задачи закраски области предпочтительнее алгоритмы, способные обрабатывать сразу целые группы пикселов, т. е. использовать их "связность" - если данный пиксел принадлежит области, то скорее всего его ближайшие соседи также принадлежат данной области. Ясно, что по заданной точке (х, у) отрезок [xl, хr] максимальной длины, проходящий через эту точку и целиком содержащийся в области, построить несложно. После заполнения этого отрезка необходимо проверить точки, лежащие непосредственно над и под ним. Если при этом мы найдем незаполненные пикселы, принадлежащие данной области, то для их обработки рекурсивно вызывается функция. Этот алгоритм намного эффективнее предыдущего и способен работать с областями самой сложной формы
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #102 : 07-06-2010 14:36 » |
|
goodking, учитывая ограниченный объем стека МК от рекурсии мы отказываемся. Рекурсию можно использовать на малых областях.
Задача. Залить дисплей рекурсивным методом размер NxM при лучших условиях тебе понадобится стек размером n*m
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
goodking
|
|
« Ответ #103 : 07-06-2010 14:46 » |
|
немножко не то, я имел ввиду этот алгоритм Существует и другой подход к заполнению области сложной формы, заключающийся в определении ее границы и последовательном заполнении горизонтальных участков между граничными пикселами. Такой алгоритм имеет следующую структуру: • построение упорядоченного списка граничных пикселов (отслеживается верхняя граница); • проверка внутренности (для обнаружения в ней дыр); • заполнение области горизонтальными отрезками, соединяющими точки границы
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #104 : 07-06-2010 14:51 » |
|
goodking, пойми, это все алгоритмы ресурсоемкие (жрут много памяти) Запомнить контур, построить список
Основная проблема с которой сталкиваемся - это касание в точке "сканирования", которая и сбивает четность.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
goodking
|
|
« Ответ #105 : 07-06-2010 14:54 » |
|
goodking, пойми, это все алгоритмы ресурсоемкие (жрут много памяти) Запомнить контур, построить список
Основная проблема с которой сталкиваемся - это касание в точке "сканирования", которая и сбивает четность.
то-есть в точке изгиба?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #106 : 07-06-2010 14:58 » |
|
ну да, конечно.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
goodking
|
|
« Ответ #107 : 07-06-2010 15:05 » |
|
ну да, конечно.
а если задать условие, заливать только если количество пересеченных точек-четное?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #108 : 07-06-2010 15:13 » |
|
goodking, опять возвращаемся назад. См. рисунок. Отрезок на рисунке испортит работу такого алгоритма. Необходима логика для проверки, что является контуром, а что - нет.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #109 : 07-06-2010 17:48 » |
|
Задача. Залить дисплей рекурсивным методом размер NxM при лучших условиях тебе понадобится стек размером n*m
С какой это стати n*m?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #110 : 08-06-2010 02:52 » |
|
Ещё мысль по заливанию: заливать, представляя, что внизу у нас сила тяжести ))
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #111 : 08-06-2010 03:31 » |
|
Леш, расскажи подробнее. Лучше с примером.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #112 : 08-06-2010 03:34 » |
|
как в природе - жидкость из места затравки льётся вниз, заполняет низины, переливается через края перегибов ("только пузыри воздуха" не мешают заполнять перевёрнутые "стаканы")
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #113 : 08-06-2010 05:27 » |
|
Ещё мысль по заливанию: заливать, представляя, что внизу у нас сила тяжести ))
как в природе - жидкость из места затравки льётся вниз, заполняет низины, переливается через края перегибов ("только пузыри воздуха" не мешают заполнять перевёрнутые "стаканы")
Очень удачная метафора. Только я бы плоскость расположил горизонтально, а в закрашенных местах сделал повышение рельефа. Тогда тяжелая жидкая краска будет растекаться по свободным областям, пока не упрется в дамбу. Заливка прекращается, когда повышается уровень краски, это означает, что ей больше некуда растекаться. Этакая аналоговая вычислительная машина.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Dale
|
|
« Ответ #114 : 08-06-2010 05:35 » |
|
Правда, программная реализация такой модели, скорее всего, будет весьма ресурсоемкой. В природе ведь каждая молекула-шарик, которую капнули сверху, будет стремиться растолкать соседей, заставляя их подвинуться на свободное место, и все шарики действуют одновременно. У нас один процессор, который должен поочередно подумать за каждый шарик, причем после его перемещения меняется картина в целом (освобождается вакансия, которую можно заполнить). Если бы мы располагали матрицей процессоров по числу пикселей битовой карты, такая стратегия была бы весьма эффективной.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #115 : 08-06-2010 05:52 » |
|
а в закрашенных местах сделал повышение рельефа
я не совсем то имел в виду. Надо не "наливать в тарелку сверху" (ведь это , по сути, будет A* ), а "вливать в форму сбоку" , тогда и вот это программная реализация такой модели, скорее всего, будет весьма ресурсоемкой.
будет не так: надо сначала "течь вниз до упора" , а потом разливаться по низине, поднимая уровень заливки оттуда. Переливаться через края. И так до победного. Моделировать молекулы не нужно - мы лишь мысленно тянем курсор закраски вниз, а потом он всплывает, закрашивая всё как уровень прибывающей жидкости
|
|
« Последнее редактирование: 08-06-2010 05:54 от Алексей1153++ »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #116 : 08-06-2010 06:07 » |
|
Еще реализация
Найти точку на контуре и проходить ее по контуру во внутрь. Недостаток - дырки в области.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #117 : 08-06-2010 06:08 » |
|
Алексей1153++, то что ты предлагаешь, чем отличается от волнового метода?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #118 : 08-06-2010 06:27 » |
|
принципом. А стек будет использоваться только в местах перегибов вот как-то так
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #119 : 08-06-2010 06:56 » |
|
Sla, он предлагает написать пиксельный тетрис Производительность будет просто замечательная
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
|