История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Часто логика работы программы, и идеи лежащие в основе транзита ввод->результат
видно буквально глазами или по косвенным признакам. Конкретно эту программу отреверсить можно буквально по скриншоту.
Скорее всего, на холсте одновременно рисуется два слоя, первый произвольный корявый, а второй из прямых/кривых линий (в зависимости от динамики рисования) первый мы видим, а по второму программа определяет фигуру. Например если рисуя линию я резко меняю направление движения «карандаша» это легко заметить и сформировать в этом месте точку от которой идёт другая невидимая линия. А далее просто игнорируем маленькие ломанные линии, и смотрим на углы пересечения и их количество с учётом некой погрешности + отношения углов друг к другу, по итоговому результату можно просто из таблички брать имя фигуры =)
Всё, я отреверсил. Теперь осталась нудятина, записать эти мысли в код, попутно додумывая детали.
Для полноты картины можно ещё сломать алгоритм, чтобы программа не смогла определить фигуру, если посмотреть на это в картинке, то это будет тоже самое что прочитать исходники, через строчку.
Исходная версия LINUX-ORG-RU, :
Часто логика работы программы, и идеи лежащие в основе транзита ввод->результат
видно буквально глазами или по косвенным признакам. Конкретно эту программу отреверсить можно буквально по скриншоту.
Скорее всего, на холсте одновременно рисуется два слоя, первый произвольный корявый, а второй из прямых/кривых линий (в зависимости от динамики рисования) первый мы видим, а по второму программа определяет фигуру. Например если рисуя линию я резко меняю направление движения «карандаша» это легко заметить и сформировать в этом месте точку от которой идёт другая невидимая линия. А далее просто игнорируем маленькие ломанные линии, и смотрим на углы пересечения и их количество с учётом некой погрешности + отношения углов друг к другу, по итоговому результату можно просто из таблички брать имя фигуры =)
Всё, я отреверсил. Теперь осталась нудятина, записать эти мысли в код, попутно додумывая детали.