Dalam post kali ini, kita akan membahas tentang Geometric Programming yang sederhana-sederhana aja.
- Sebagai permulaan, kita akan (amat) sangat membutuhkan kelas Point2D (titik). Kelas Point2D kita rancang sebagai berikut:
public final class Point2D implements Serializable, Comparable<Point2D>{
private static final long serialVersionUID = -6165181156932437469L;
final Double x;
final Double y;
public Point2D(final double x, final double y){
this.x = x;
this.y = y;
}
public Double getX() {return x;}
public Double getY() {return y;}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((x == null) ? 0 : x.hashCode());
result = prime * result + ((y == null) ? 0 : y.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final Point2D other = (Point2D) obj;
if (x == null) {
if (other.x != null) return false;
}
else if (!x.equals(other.x)) return false;
if (y == null) {
if (other.y != null) return false;
}
else if (!y.equals(other.y)) return false;
return true;
}
public int compareTo(Point2D p) {return x.compareTo(p.x) == 0 ? (y.compareTo(p.y)) : (x.compareTo(p.x));}
public String toString(){return x + "," + y;}
} - Kemudian kita akan membutuhkan kelas Points yang akan melakukan operasi-operasi geometrik: Letakkan kelas Points pada package yang sama dengan kelas Point2D dan Point3D.
public final class Points {
public static double calcPolygonArea(Point2D[] points){
assert(points.length > 2);
double result = 0D;
for (int i = 1; i <= points.length; i++)
result += points[i % points.length].x * (points[(i+1) % points.length].y - points[i-1].y);
return Math.abs(result) / 2;
}
public static double calcDistanceBetweenTwoPoints(Point2D p1, Point2D p2){
return Math.hypot(p1.x - p2.x, p1.y - p2.y);
}
}