1 public class rotatevisitor extends visitor 2 { 3 protected point Center; 4 protected point RelativeBefore; 5 protected point RelativeAfter; 6 protected float sinAlpha,cosAlpha; 7 8 public rotatevisitor(float x,float y, float a) 9 { 10 Center=new point(x,y); 11 RelativeBefore=new point(0,0); 12 RelativeAfter=new point(0,0); 13 sinAlpha=(float) Math.sin(a); 14 cosAlpha=(float) Math.cos(a); 15 } 16 17 public void visitPOINT (point p) 18 { 19 RelativeBefore.X=p.X-Center.X; 20 RelativeBefore.Y=p.Y-Center.Y; 21 22 RelativeAfter.X=cosAlpha*RelativeBefore.X-sinAlpha*RelativeBefore.Y; 23 RelativeAfter.Y=sinAlpha*RelativeBefore.X+cosAlpha*RelativeBefore.Y; 24 25 p.set(RelativeAfter.X+Center.X,RelativeAfter.Y+Center.Y); 26 } 27 28 public void visitLINE (line l) 29 { 30 l.Begin.receive(this); 31 l.End.receive(this); 32 } 33 34 public void visitCIRCLE (circle c) 35 { 36 c.Center.receive(this); 37 } 38 }