При создании фигуры - по событию поля ввода OnMouseDown или OnMouseMove (с нажатой левой кнопкой) получаем очередные координаты Xi и Yi. В специальные динамические массивы DeltaX и DeltaY заносим значения dXi-1=dXi - dXi-1 и dYi-1=dYi - dYi-1 Т. обр. если фигура содержала K точек, то размер массивов DeltaX и DeltaY N=K-1 элементов. Эти массивы содержат динамику отклонений по X и по Y при начертании фигуры. Почему хранятся разности координат, а не координаты? Чтоб этот массив не зависел от того, в каком месте поля нарисована фигура, выше или ниже, правее или левее - массив будет тот же, если форма фигуры та же. Получаются такие, к примеру, графики:
Такие графики не зависят от положения рисунка, но зависят от его размера -
не формой, и не амплитудой, а количеством точек, длиной. Два символа:
Чтоб распознавать символы разного размера, необходимо привести массивы к
унифицированному виду - с фиксированным количеством ячеек. Предположим,
полученные массивы имеют размер N, а унифицированные массивы - размер K.
Тогда каждая ячейка: И правда, нулевая ячейка DeltaXunif[0] примет значение нулевой DeltaX[0], последняя - последней, промежуточные - соответственно распределятся, независимо от того, K>N или наоборот. Это унифицированные массивы можно подвергать анализу или занести в библиотеку как эталонные для символа, который укажет пользователь. Библиотека - это массив таких эталонных унифицированных массивов, там каждой паре массивов DeltaXlib[i], DeltaYlib[i] соответствует какой-то символ S[i]. Распознавание очередного символа происходит так. Получаем пару массивов DeltaXunif, DeltaYunif. Затем выбираем из библиотеки первую пару эталонных массивов DeltaX[0], DeltaY[0] и вычисляем значение Замопинаем первое Dтек и соответствующий символ Sтек. Затем из библиотеки выбирается следующие массивы и для них вычисляется очередное D. Если оно оказалось меньше, чем Dтек - то значит этому эталону анализируемый символ соответствует сильнее, в этом случае присваиваем Dтек и Sтек новые значения. И так со всеми массивами библиотеки. В конце Sтек и будет распознанным символом. Если символ распознал неправильно, пользователь может указать правильное значение S и занести массивы DeltaXunif, DeltaYunif в библиотеку. Щурко Виталий. schur@gala.net |