Пропорциональное. Нижний предел - как раз тот, при котором выполняется условие. И даже чуть больше (с запасом) - вообще-то, нижний предел определяется тем, чтобы на клавишах можно было написать символы не меньше чем в 8 пунктов.Хакер писал(а):Стоит, правда, указать, о каком мастабировании идёт речь. Пропорциональном или непропорциональном. И в каких пределах.
arthur2 писал(а):Абстрактно я себе представляю задачу так: векторизирую контуры, стираю их на исходной картинке, масштабирую, рисую контуры заново, выползания за контуры затираю, недотягивания до контура дорисовываю...
arthur2 писал(а):1. Как векторизовать контур
arthur2 писал(а):Как дорисовать, если появятся просветы между контуром и кнопкой.
arthur2 писал(а):Очень интересно и доходчиво, но про другое
Хакер писал(а):тест успешен, если набор всех точек от начальной до текущей (включая начальную и текущую) совпадает с набором точек, который возвращается алгоритмом Брезенхема для отрезка от начальной точки до текущей.
В противном случае вставлять между двумя вершинами, такими, что точка, соответствующая добавляемой вершине, в отсортированном списке точек находится между точками, соответствующим паре вершин, между которыми ты собрался добавлять.
arthur2 писал(а):На отрезке от синей до синей точки алгоритм выполняется, а вот от синей до зеленой - нет, хотя зеленая - ну никак не вершина. Я понимаю, что чего-то недопонял
arthur2 писал(а):А с порядком добавления вершин - вообще не понял
arthur2 писал(а):То есть, если этим способом векторизировать растровую окружность, а потом увеличить - получится многоугольник.
arthur2 писал(а):Вот ещё сложность: какую точку считать вершиной?
Как? Тем более, что это будут не обязательно тройки, а и четвёрки и пятерки...Хакер писал(а):Действительно, проблема есть, но она не такая страшная: можно после обхода пройтись по списку вершин и удалить все коллинеарные тройки
arthur2 писал(а):Вершины на выходе всё равно нужны в виде массива поинтов (чтобы передавать в АПИ) Так что предлагаю такой подход: завести массив флагов той же размерности, что и массив точек. При нахождении вершины просто поднимать флаг по тому же индексу, а при лишении точки статуса вершины - флаг опускать. В конце пройти по списку точек, и если флаг поднят, собирать точки в выходной массив (можно прямо в тот же массив точек - дальше он всё равно не понадобится).
arthur2 писал(а):если точка соседствует по сторонам с тремя белыми полями - она заведомо вершина.
Если у точки два белых соседа по сторонам и три - по диагонали - она заведомо вершина.
И всё-таки, если после первого прохода ни одна вершина не выявилась, возникает вопрос: а с какой же точки начать проверку по тесту?
Если начать с точки 1 по часовой стрелке, то все следующие скругленные углы прочитаются не так, как первый.
Как? Тем более, что это будут не обязательно тройки, а и четвёрки и пятерки...
Нет, в этом случае у точек по сторонам - только два белых соседа. Третий сосед - по диагонали.Хакер писал(а):Что за поля? Если имелись в виду белые точки, то это не так, потому что у 45°-наклонной все точки имеют три белых соседа.
Хакер писал(а):Такие условия слишком сложные, чтобы применять их ко всем точкам полигональной фигуры.
Упс... а список ты в чём хранить будешь? Это по меньшей мере массив интеджей (если хранить просто индексы).Хакер писал(а):Флаг потребует 1 бит, а отожрётся паразитно при этом от 7 до 31. <...> Я предлагаю вести список указатель на элементы массива вершин.
Что такое битовый банк? догадываюсь, что что-то вроде битового поля, но как это реализовать на бейсике? Тем более - с индексами отдельных битов?Если ввести битовый банк, это может оказаться лучше.
arthur2 писал(а):Во-первых, во время обхода контура у каждой точки всё равно смотреть соседей - иначе как вычленить контур.
arthur2 писал(а):Во-вторых, это не сложнее, чем ВСТ для каждой точки, так что если некоторые вершины удастся вычислить без теста, это окупится.
arthur2 писал(а):Упс... а список ты в чём хранить будешь? Это по меньшей мере массив интеджей (если хранить просто индексы).
Да и потом, не так уж и много с флагами - по байту на точку.
arthur2 писал(а):По-моему, расход окупится.
arthur2 писал(а):Что это? догадываюсь, что что-то вроде битового поля, но как это реализовать на бейсике? Тем более - с индексами отдельных битов?
Не понял Поинт - это ведь два лонга. Ну ладно, пусть будет два интеджа - всё равно 4 байта.Хакер писал(а):А на координату точки — 3 байта? По 12 бит (!!!) на координату?
Хакер писал(а):Контур можно обходить грубо, а потом приводить в правильный вид сортировкой. Но есть классный способ обходить растр построчно и при этом получать правильную последовательность точек. Здесь весь смысл в том, что последовательный (serial) обход растра на порядок эффективнее случайного (random-access).
arthur2 писал(а):Не понял Поинт - это ведь два лонга. Ну ладно, пусть будет два интеджа - всё равно 4 байта.
arthur2 писал(а):Это как? не понял принципа
Ничего не понял. У меня - массив байтов-флагов (по байту добавки на точку) У тебя - массив интеджей-индексов (по два байта). У меня экономней. Ну ладно - у тебя массив короче, потому что там не все точки, а только вершины... Всё равно почти поровну.Хакер писал(а):Два лонга и один бит на флаг. Итого 65 битов. Сколько надо лишних битов, чтобы «поинт» стал «круглым»? 31 или 63? Лишних-то бита, только для выравнивая до кратной границы...
Ну я-то хочу, но если тебе в лом, то не надоХакер писал(а):Боже упаси. Ты хочешь, чтобы я и этот свой принцип тебе расписал?
arthur2 писал(а):У меня экономней. Ну ладно - у тебя массив короче, потому что там не все точки, а только вершины... Всё равно почти поровну.
arthur2 писал(а):Ну я-то хочу, но если тебе в лом, то не надо
Круто! ПопробуюХакер писал(а):Дальше сам.
Хакер писал(а):Что, эффективно?
Вместо цвета обращаешь внимание на изменение цвета. Опять дифференцируешь, иными словами.arthur2 писал(а):Это мне несколько подпортило построчное считывание контура - теперь не соображу, как его реализовать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1