001 002 /** 003 * Point is an abstract class which can be used to store any 004 * dimensional system. A mathematical operation on a Point; add, 005 * multiply, and abs, can be performed using instance or static 006 * methods.*/ 007 public abstract class Point implements Cloneable { 008 009 /** 010 * Instance method to return the dimension of the Point, abstract 011 * and must be defined by any subclasses of Point. */ 012 public abstract int dimension(); 013 014 /** 015 * Instance method to return the coordinate of the Point at index 016 * i, abstract and must be defined by any subclasses of Point. */ 017 public abstract double coordinate(int i); 018 019 /** 020 * Instance method to add a Point to the current Point, abstract 021 * and must be defined by any subclasses of Point. */ 022 public abstract void add(Point delta); 023 024 /** 025 * Instance method to multiply the current Point by a double, 026 * abstract and must be defined by any subclasses of Point. */ 027 public abstract void multiply(double c); 028 029 /** 030 * Method to return the maximum of the Point, abstract and must be 031 * defined by any subclasses of Point. */ 032 public abstract double max(); 033 034 /** 035 * Method to return the minimum of the Point, abstract and must be 036 * defined by any subclasses of Point. */ 037 public abstract double min(); 038 039 /** 040 * Instance method to calculate the absolute value of the Point, 041 * abstract and must be defined by any subclasses of Point. */ 042 public abstract void abs(); 043 044 /** 045 * Instance method to return the contents of the Point in human 046 * readable form, abstract and must be defined by any subclasses 047 * of Point.*/ 048 public abstract String toString(); 049 050 /** 051 * Instance method to truncate the Point's accuracy to n decimal 052 * places, abstract and must be defined by any subclasses of 053 * Point.*/ 054 public abstract void truncate(int n); 055 056 /** 057 * Instance method to round the Point's accuracy to n decimal 058 * places, abstract and must be defined by any subclasses of 059 * Point.*/ 060 public abstract void round(int n); 061 062 /** 063 * Overrides the object.clone() method to enable Point cloning 064 * outside of Point package.*/ 065 public Object clone() { 066 try { 067 Point p = (Point) super.clone(); 068 return (Object) p; 069 } catch (CloneNotSupportedException cloneError) { 070 throw new Error("This should never happen!"); 071 } 072 } 073 074 /** 075 * Static method to multiply a Point by a double.*/ 076 public static Point multiply(Point p, double c){ 077 Point q = (Point) p.clone(); 078 q.multiply(c); 079 return q; 080 } 081 082 /** 083 * Static method to add two Points.*/ 084 public static Point add(Point a, Point b){ 085 Point aClone = (Point) a.clone(); 086 aClone.add(b); 087 return aClone; 088 } 089 090 /** 091 * Static method to add three Points.*/ 092 public static Point add(Point a, Point b, Point c){ 093 Point aClone = (Point) a.clone(); 094 aClone.add(b); 095 aClone.add(c); 096 return aClone; 097 } 098 099 /** 100 * Static method to add four Points.*/ 101 public static Point add(Point a, Point b, Point c, Point d){ 102 Point aClone = (Point) a.clone(); 103 aClone.add(b); 104 aClone.add(c); 105 aClone.add(d); 106 return aClone; 107 } 108 109 /** 110 * Static method to calculate and return a new Point equal to the 111 * absolute value of the Point p.*/ 112 public static Point abs(Point p) { 113 Point q = (Point) p.clone(); 114 q.abs(); 115 return q; 116 } 117 118 } 119 120 121 122