import java.awt.*; public class pointOnCircle extends pointOnShape { protected double angle; protected circle c; public pointOnCircle(double X, double Y, shape S) { super(X, Y, S); if (!(S instanceof circle)) throw(new IllegalArgumentException( "shape passed to pointOnLine must be a line")); c = (circle)s; setAngle(); } public boolean exists() { x = c.center.x + c.radius() * Math.cos(angle); y = c.center.y + c.radius() * Math.sin(angle); return(super.exists()); } private void setAngle() { double vx = x - c.center.x; double vy = y - c.center.y; angle = Math.atan2(vy, vx); } public void SetPoint(double X, double Y) { point p = s.coordOnShape(X, Y); x = p.x; y = p.y; setAngle(); } public void setX(double X) { point p = s.coordOnShape(X, y); x = p.x; y = p.y; setAngle(); } public void setY(double Y) { point p = s.coordOnShape(x, Y); x = p.x; y = p.y; setAngle(); } public void draw(GeometryWindow G) { if (!hidden) { x = c.center.x + c.radius() * Math.cos(angle); y = c.center.y + c.radius() * Math.sin(angle); G.setColor(color); G.drawPoint(x, y); } } public boolean translate(double dx, double dy) { translated = true; point p = s.coordOnShape(x + dx, y + dy); x = p.x; y = p.y; setAngle(); return(true); } public boolean mouseDown(double X, double Y) { if (hidden) return(false); if (gMath.distance(x, y, X, Y) < clickRange) { dragging = true; point p = s.coordOnShape(X, Y); x = p.x; y = p.y; setAngle(); return(true); } return(false); } public boolean mouseDrag(double X, double Y) { if (dragging == true) { point p = s.coordOnShape(X, Y); x = p.x; y = p.y; setAngle(); return(true); } return(false); } public boolean mouseUp(double X, double Y) { dragging = false; return(false); } };