DP,Douglas-Peucker算法java实现

本文介绍了如何使用Java实现Douglas-Peucker算法,该算法用于简化曲线,通过保留最大距离点来逐步减少曲线的复杂度。在处理过程中,当最大距离dmax大于预设阈值D时,会将曲线分为两部分并递归处理。
摘要由CSDN通过智能技术生成
    基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值