Я получаю следующие точки в качестве входных данных:
Point A(200 ; 400)
Point B(400 ; 400)
Point C(400 ; 200)
Point D(600 ; 200)
Point E(700 ; 500)
Point F(500 ; 700)
Point G(200 ; 600)
Эти точки образуют сегменты AB, B C, CD, DE, EF, FG и GA, которые будут нарисованы таким образом:
Теперь мне было поручено написать алгоритм автоматического масштабирования c, основанный на ближайших числах, определяющих длину реального сегмента:
Поскольку мне приходится самостоятельно определять ограничения, я просто решил сделать все возможное, чтобы углы не изменились. Во-первых, я определяю самый длинный сегмент, чтобы установить sh шкалу (например, «с меткой длины 6» = 250 пикселей, затем с меткой длины 1 ~ = 41,7).
Затем я обрабатываю следующий сегмент короче, измените его масштаб с центра и примените тот же векторный перевод к соседнему элементу.
Это лучший вывод, который я могу получить прямо сейчас:
Но этот метод будет в конечном итоге бесконечным l oop, или будет действительно неточным в других случаях, особенно когда линии нарисованы от руки и не совсем прямые.
Существуют ли хорошо известные алгоритмы для решения эта ситуация? Я понятия не имею, с чего начать при поиске в некоторых геометрических библиотеках, таких как GEOS, libigl, ...