SCREEN 12: CLS : WINDOW (-120, -90)-(120, 90): COLOR 7 pi = 4 * ATN(1) step1 = 2 * pi / 100 step2 = 2 * pi / 1000 r = 12: r1 = 75 t = -1 / 3 FOR j = 0 TO 2 * pi STEP step2 x0 = r * SIN(1 * j) y0 = r * COS(1 * j) FOR i = -step1 TO 2 * pi STEP step1 lx1 = lx: ly1 = ly lx = r * COS(3 * (i + t * j)) + r1 * COS(i) ly = r * SIN(3 * (i + t * j)) + r1 * SIN(i) IF i >= 0 THEN LINE (lx1 + x0, ly1 + y0)-(lx + x0, ly + y0) END IF NEXT i NEXT j CIRCLE (0, 0), 3 * r CIRCLE (0, r), 2 * r LINE (-3, r)-(3, r) LINE (0, r - 3)-(0, r + 3) LINE (-3, 0)-(3, 0) LINE (0, -3)-(0, 3) PAINT (0, 4.5 * r), 14, 7 PAINT (0, 81), 4, 14 'untill here it draws the maximum possible piston periphery '(you can play with r and r1 for different epitrochoidal and 'rotor shapes. ' 'the following just make the animation (press ESC to quit) FOR j = 0 TO 50 * pi STEP step2 x0 = r * SIN(1 * j) y0 = r * COS(1 * j) FOR i = -step1 TO 2 * pi STEP step1 lx1 = lx: ly1 = ly lx = r * COS(3 * (i + t * j)) + r1 * COS(i) ly = r * SIN(3 * (i + t * j)) + r1 * SIN(i) IF i >= 0 THEN LINE (lx1 + x0, ly1 + y0)-(lx + x0, ly + y0), 0 END IF NEXT i FOR i = -step1 TO 2 * pi STEP step1 lx1 = lx: ly1 = ly lx = r * COS(3 * (i + t * j)) + r1 * COS(i) ly = r * SIN(3 * (i + t * j)) + r1 * SIN(i) IF i >= 0 THEN LINE (lx1 + x0, ly1 + y0)-(lx + x0, ly + y0), 4 END IF NEXT i a$ = "" a$ = INKEY$ WHILE a$ <> "" IF ASC(a$) = 27 THEN COLOR 7: CLS : END a$ = "" WEND NEXT j END