{ MIKE BRENNAN > I've been trying For some time to get a Pascal Procedure that can > SCALE and/or ROTATE Graphic images. if anyone has any idea how to do Here are a couple of Procedures I made For rotating images, 2D and 3D. I basically had to rotate each dot individually, and then form the image by connecting the specified dots. Here they are... } Procedure Rotate(cent1, cent2 : Integer; { Two centroids For rotation } angle : Real; { Angle to rotate in degrees } Var coord1, coord2 : Real); { both coordinates to rotate } Var coord1t, coord2t : Real; begin {Set coordinates For temp system} coord1t := coord1 - cent1; coord2t := coord2 - cent2; {set new rotated coordinates} coord1 := coord1t * cos(angle * pi / 180) - coord2t * sin(angle * pi / 180); coord2 := coord1t * sin(angle * pi / 180) + coord2t * cos(angle * pi / 180); {Change coordinates from temp system} coord1 := coord1 + cent1; coord2 := coord2 + cent2; end; Procedure Draw3d(x, y, z : Real; {coordinates} a, b : Real; {View angles} Var newx, newy : Integer); {return coordinates} Var Xd, Yd, Zd : Real; begin Xd := cos(a * pi / 180) * cos(b * pi / 180); Yd := cos(b * pi / 180) * sin(a * pi / 180); Zd := -sin(b * pi / 180); {Set coordinates For X/Y system} newx:= round(-z * Xd / Zd + x); newy:= round(-z * Yd / Zd + y); end; { For the first Procedure, you can rotate an image along any two axes, (ie X,Y...X,Z...Y,Z). Simply calculate the centroid For each axe, (the average X coordinate, or Y or Z), then pass the angle to rotate (use a negative For other direction) and it will pass back the new rotated coordinates. The second Procedure is For 3D drawing only. It transforms any 3D dot into its corresponding position on a 2D plan (ie your screen). The new coordinates are returned in the NewX, and NewY. Those are what you would use to plot your dot on the screen. }