基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用dmax与限差D相比:
若dmax<D,这条曲线上的中间点全部舍去;
若dmax<D,这条曲线上的中间点全部舍去;
若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法。
定义曲线上的点:
public class Point {
private double x;
private double y;
public Point(double x,double y){
this.x = x;
this.y = y;
}
public Point(String x,String y){
this.x = Double.parseDouble(x);
this.y = Double.parseDouble(y);
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public void printPoint(){
System.out.print(MessageFormat.format("({0},{1})", this.x,this.y));
}
}
定义线
public class Line {
private Point start;
private Point end;
private ArrayList<Point> linePoints = new ArrayList<Point>();
private double A;
private double B;
private double C;
private int index;//最大距离所对应曲线上的点的索引号
private double distance;//最大距离,与阈值比较
public ArrayList<Point> getLinePoints() {
return linePoints;
}
public void setLinePoints(ArrayList<Point> linePoints) {
this.linePoints = linePoints;
}
//已知了线的两个端点,求两个端点所连线段到线的最大距离
public Line(Point start,Point end ){
this.start = start;
this.en