Мне нужно было решить ваш вопрос №2 немного назад, и после просмотра нескольких доступных алгоритмов упрощения строк я создал свой собственный.
Процесс прост и, кажется, работает хорошо, хотя он может быть немного медленным, если вы не реализуете его правильно:
P[0..n]
- ваш массив точек
Пусть T[n]
будет определен как треугольник, образованный точками P[n-1], P[n], P[n+1]
Max
- количество пунктов, до которых вы пытаетесь уменьшить эту линию.
- Рассчитать площадь каждого возможного треугольника
T[1..n-1]
в наборе.
- Выберите треугольник
T[i]
с наименьшей площадью
- Удалите точку
P[i]
, чтобы существенно сгладить треугольник
- Пересчитать площадь затронутых треугольников
T[n-1], T[n+1]
- Переходите к шагу # 2, если количество точек>
Max