Answer the question
In order to leave comments, you need to log in
How to compare arbitrary shapes?
I carry out the task, which consists in the following:
there is a reference circle of a certain radius;
3 users draw a circle by hand, and the program must determine which circle is more consistent with the reference.
Each will have a circular arbitrary figure.
How can these figures be compared algorithmically or mathematically?
Answer the question
In order to leave comments, you need to log in
Вычислить среднее значение радиуса от 0 до 2 PI, среднеквадратичные отклонения от этого среднего. Можно еще и частоту отклонений включить в анализ, т. е. сколько раз нарисованный круг пересечет эталонный, средний (чем меньше, тем лучше).
Самый простой вариант - вырезать круг из фигуры совместив центры и посчитать площадь по модулю. Где площадь меньше там фигура и более "похожа".
Центр у фигуры можно найти разными способами лучше всего тупо поделить пополам по площади "верх" и "низ" и "лево" и "право".
Если с площадями сложно - можно использовать простой механизм:
Режем по оси X,Y на четное число равных отрезков (например 4). Координата между средними отрезками (конец 2го и начало 3го) и будет условным центром. Если фигура не совсем кривая (то есть круг похож на круг или эллипс) центр практически попадет на центр по площади.
Прежде чем сравнивать нарисованные круги с эталонным, нужно определиться с мерой по которой вы будете сравнивать. Возможные варианты мер:
1. Радиус.
2. Площадь.
3. Расположение центра
Про расположение центра вам уже написали.
Площадь можно посчитать в точках, расположенных внутри нарисованной фигуры (Цикл по x и y - проверяете принадлежность точки нарисованной фигуре).
Для подсчёта радиуса нужно выбрать количество разбиений круга - 360, 100, 50 и подсчитать отклонение (линейное, квадратичное или любое подходящее) радиуса по указанным направлениям. В простейшем случае можно просто подсчитать максимальный и минимальный радиус нарисованного круга и сравнивать их.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question