N
N
No Name2016-11-27 00:17:55
JavaScript
No Name, 2016-11-27 00:17:55

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

4 answer(s)
E
Evgeny Kucherenko, 2016-11-27
@evgenyspace

Вычислить среднее значение радиуса от 0 до 2 PI, среднеквадратичные отклонения от этого среднего. Можно еще и частоту отклонений включить в анализ, т. е. сколько раз нарисованный круг пересечет эталонный, средний (чем меньше, тем лучше).

L
lolhunter, 2016-11-27
@lolhunter

Самый простой вариант - вырезать круг из фигуры совместив центры и посчитать площадь по модулю. Где площадь меньше там фигура и более "похожа".
Центр у фигуры можно найти разными способами лучше всего тупо поделить пополам по площади "верх" и "низ" и "лево" и "право".
Если с площадями сложно - можно использовать простой механизм:
Режем по оси X,Y на четное число равных отрезков (например 4). Координата между средними отрезками (конец 2го и начало 3го) и будет условным центром. Если фигура не совсем кривая (то есть круг похож на круг или эллипс) центр практически попадет на центр по площади.

S
Sumor, 2016-11-27
@Sumor

Прежде чем сравнивать нарисованные круги с эталонным, нужно определиться с мерой по которой вы будете сравнивать. Возможные варианты мер:
1. Радиус.
2. Площадь.
3. Расположение центра
Про расположение центра вам уже написали.
Площадь можно посчитать в точках, расположенных внутри нарисованной фигуры (Цикл по x и y - проверяете принадлежность точки нарисованной фигуре).
Для подсчёта радиуса нужно выбрать количество разбиений круга - 360, 100, 50 и подсчитать отклонение (линейное, квадратичное или любое подходящее) радиуса по указанным направлениям. В простейшем случае можно просто подсчитать максимальный и минимальный радиус нарисованного круга и сравнивать их.

B
BigObfuscator, 2016-12-01
@BigObfuscator

Используйте контурный анализ.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question