{Dear Gayle and Jeff, since a longtime I have been looking for a Pascal-routine that draws an ellips with axes in a random direction on the screen. Up to now I only found routines that draw ellipses with horizontal and vertical axes. But last friday I searched the SWAG-archive and found some files that helped me develop the routine myself. I found a fast ellips-drawing procedure by Bernie Pallek and arotation-procedure by Mike Brennan. I have combined these two and I found them to draw the ellips I wanted! So attached to this mail is a file which contains the sought-after procedures to draw an ellips with random axes. I hope you'll put it in the archive. Many thanks to you for keeping such an archive. Without your help I'd still be searching now! Regards, Wouter van Reeven Greetings * * * from Wouter van Reeven * * alias "Teus" * * WReeven@ISD-Server.leidenuniv.nl "Alone in the clouds all blue...." Only users lose drugs. Clear skies!!! {original 'Procedure Rotate' by Mike Brennan} Procedure Rotate(cent1,cent2,angle:Integer;coord1,coord2:Real;clr:word); Var coord1t, coord2t : Real; c1, c2 : integer; begin coord1t := coord1 - cent1; coord2t := coord2 - cent2; coord1 := coord1t * cos(angle * pi / 180) - coord2t * sin(angle * pi / 180); coord2 := coord1t * sin(angle * pi / 180) + coord2t * cos(angle * pi / 180); coord1 := coord1 + cent1; coord2 := coord2 + cent2; c1 := round(coord1); c2 := round(coord2); putpixel(c1,c2,clr); end; {original 'Procedure Ellipse2' by Bernie Pallek. Original code by Sean Palmer} {but, and I quote, Bernie 'mangled it'} PROCEDURE Ellipse2(exc, eyc, ea, eb, i, clr : Integer); VAR elx, ely : Integer; aa, aa2, bb, bb2, d, dx, dy : LongInt; x,y : real; BEGIN elx := 0; ely := eb; aa := LongInt(ea) * ea; aa2 := 2 * aa; bb := LongInt(eb) * eb; bb2 := 2 * bb; d := bb - aa * eb + aa DIV 4; dx := 0; dy := aa2 * eb; x := exc; y := eyc - ely; rotate(exc,eyc,i,x,y,clr); x := exc; y := eyc + ely; rotate(exc,eyc,i,x,y,clr); x := exc - ea; y := eyc; rotate(exc,eyc,i,x,y,clr); x := exc + ea; y := eyc; rotate(exc,eyc,i,x,y,clr); WHILE (dx < dy) DO BEGIN IF (d > 0) THEN BEGIN Dec(ely); Dec(dy, aa2); Dec(d, dy); END; Inc(elx); Inc(dx, bb2); Inc(d, bb + dx); x := exc + elx; y := eyc + ely; rotate(exc,eyc,i,x,y,clr); x := exc - elx; y := eyc + ely; rotate(exc,eyc,i,x,y,clr); x := exc + elx; y := eyc - ely; rotate(exc,eyc,i,x,y,clr); x := exc - elx; y := eyc - ely; rotate(exc,eyc,i,x,y,clr); END; Inc(d, (3 * (aa - bb) DIV 2 - (dx + dy)) DIV 2); WHILE (ely > 0) DO BEGIN IF (d < 0) THEN BEGIN Inc(elx); Inc(dx, bb2); Inc(d, bb + dx); END; Dec(ely); Dec(dy, aa2); Inc(d, aa - dy); x := exc + elx; y := eyc + ely; rotate(exc,eyc,i,x,y,clr); x := exc - elx; y := eyc + ely; rotate(exc,eyc,i,x,y,clr); x := exc + elx; y := eyc - ely; rotate(exc,eyc,i,x,y,clr); x := exc - elx; y := eyc - ely; rotate(exc,eyc,i,x,y,clr); END; END;