简介
在此感谢Darel Rex Finley,本文只是对其c代码在java上的延伸
最近,项目中有一需求,需要用一条闭合曲线将离散坐标点勾勒出来
根据Darel Rex Finley的程序,其实现了最小凸多边形边界查找(关于凸多边形及凹多边形的定义见 凸多边形 及 凹多边形)
以下介绍java版的实现过程
离散点
首先建立离散点类
/**
* <p>
* <b>离散点</b>
* <p>
* <pre>
* 离散点
* </pre>
*
* @author ManerFan 2015年4月10日
*/
public class Point {
/**
* x坐标
*/
private double x;
/**
* y坐标
*/
private double y;
/**
* 边界查找算法中 是否被找到
*/
boolean founded = false;
public Point() {
}
public Point(double x, double y) {
this.x = x;
this.y = 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;
}
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(x);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(y);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
return false;
if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
return false;
return true;
}
}
</