import java.awt.*; import java.lang.Math; public class Point2D extends Object { // Constants public final static int X = 0; public final static int Y = 1; public final static int pixel_offset = 3; // Member Variables private double m_pt[] = {0.0, 0.0}; private Rectangle m_rect = null; //////////////////////////////////////////////////////////////////////////////// // Member Functions public Point2D() { setNull(); } public Point2D(int x, int y) { m_pt[X]=(double)x; m_pt[Y]=(double)y; m_rect = new Rectangle(x-pixel_offset, y-pixel_offset, 7, 7); } public Point2D(double x, double y) { m_pt[X]=x; m_pt[Y]=y; int xx = (int)Math.round(x); int yy = (int)Math.round(y); m_rect = new Rectangle( xx-pixel_offset, yy-pixel_offset, 7, 7); } public Object clone() { Point2D pt; pt = new Point2D(m_pt[X], m_pt[Y]); return pt; } public void setNull() { m_pt[X] = 0; m_pt[Y] = 0; } public void set(int x, int y) { m_pt[X]=(double)x; m_pt[Y]=(double)y; m_rect.setLocation(x-pixel_offset, y-pixel_offset); } public void set(double x, double y) { m_pt[X]=x; m_pt[Y]=y; int xx = (int)Math.round(x); int yy = (int)Math.round(y); m_rect.setLocation(xx-pixel_offset, yy-pixel_offset); } public void set(Point2D pt) { set(pt.getX(), pt.getY()); } public double getX() { return m_pt[X]; } public double getY() { return m_pt[Y]; } public int getPixelX() { return (pixel_offset + (int)(m_rect.getLocation()).x); } public int getPixelY() { return (pixel_offset + (int)(m_rect.getLocation()).y); } public boolean contains(int x, int y) { return m_rect.contains(x, y); } ///////////////////////////////////////////////////////////////////////// // Math public Point2D add(Point2D pt) { Point2D result = new Point2D( m_pt[X]+pt.getX(), m_pt[Y]+pt.getY()); return result; } public Point2D subtract(Point2D pt) { Point2D result = new Point2D( m_pt[X]-pt.getX(), m_pt[Y]-pt.getY() ); return result; } public Point2D multiply(double d) { Point2D result = new Point2D( d * m_pt[X], d * m_pt[Y] ); return result; } public Point2D divide(double d) { Point2D result = new Point2D( m_pt[X] / d, m_pt[Y] / d ); return result; } ///////////////////////////////////////////////////////////////////////// // Draw public void paint(Graphics g) { Color c = g.getColor(); g.drawRect(m_rect.x, m_rect.y, m_rect.width - 1, m_rect.height - 1); g.setColor(Color.white); g.fillRect(m_rect.x+1, m_rect.y+1, m_rect.width - 2, m_rect.height - 2); g.setColor(c); } public void display() { System.out.println( "( " + m_pt[X] + ", " + m_pt[Y] + " )" ); } }