1. 参考文献
https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
2. 算法实现
#include <iostream>
#include <math.h>
#include <vector>
// 参考资料:
// https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
// 功能: 实现Ramer-Douglas-Peucker Algorithm
// Author: HSW
// Date: 2018-01-26
// 修改记录;
//
using namespace std;
typedef struct stPoint
{
double x;
double y;
int isSaved; // 是否为曲线拟合的保留点
stPoint()
{
x = 0;
y = 0;
isSaved = 0;
}
}stPoint;
double perpendicularDistance(stPoint curPoint, double A, double B, double C)
{
double distance = (A * curPoint.x + B * curPoint.y + C) / sqrt(A * A + B * B);
return distance < 0 ? -distance : distance;
}
// DouglasPeucker 算法
int DouglasPeucker(vector<stPo