.::. Hendra Jaya .::.

July 2, 2009

Geometric Programming

Filed under: Java — hjaya @ 8:10 am

Dalam post kali ini, kita akan membahas tentang Geometric Programming yang sederhana-sederhana aja.

  1. 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;}

  2. 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);
        }

1 Comment »

  1. Dengan mengerti ini… jangan lantas menjadi atheis ya… OTW Web ku ganti, secara yang dedemaira itu hostingannya ngejelimet… thx

    Comment by Yudistira — October 6, 2009 @ 4:18 am


RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.