' ****** START INCLUDE Polygon Macro Support ****** DIM AS INTEGER StartX, StartY, PreviousX, PreviousY, LeftMostX, LeftMostY, LeftMostNear1X, LeftMostNear1Y, LeftMostNear2X, LeftMostNear2Y, LeftMostBuddyX, LetMostBuddyY SUB DoPostLine() IF POINT(0) < LeftMostX THEN LeftMostX = POINT(0) : LeftMostY = POINT(1) : LeftMostNear1X = PreviousX : LeftMostNear1Y = PreviousY : LeftMostNear2X = -1 : LeftMostNear2Y = -1 ELSE IF LeftMostNear2X = -1 THEN LeftMostNear2X = POINT(0) : LeftMostNear2Y = POINT(1) END IF PreviousX = POINT(0): PreviousY = POINT(1) END SUB ' ****** END INCLUDE Polygon Macro Support ****** TYPE FPP ' Five Point Polygon x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 END TYPE DIM as FPP p1,p2,pj ws = 400 SCREEN _NEWIMAGE(ws, ws, 12) movement_steps = 100 DEF FNrp = RND * ws DEF FNpj(v1,v2) = SGN(v2 - v1) * ABS( v2 - v1 ) / movement_steps p1.x1 = FNrp : p1.y1 = FNrp p1.x2 = FNrp : p1.y2 = FNrp p1.x3 = FNrp : p1.y3 = FNrp p1.x4 = FNrp : p1.y4 = FNrp p1.x5 = FNrp : p1.y5 = FNrp 🟡again: p2.x1 = FNrp : p2.y1 = FNrp p2.x2 = FNrp : p2.y2 = FNrp p2.x3 = FNrp : p2.y3 = FNrp p2.x4 = FNrp : p2.y4 = FNrp p2.x5 = FNrp : p2.y5 = FNrp pj.x1 = FNpj(p1.x1,p2.x1) : pj.y1 = FNpj(p1.y1,p2.y1) pj.x2 = FNpj(p1.x2,p2.x2) : pj.y2 = FNpj(p1.y2,p2.y2) pj.x3 = FNpj(p1.x3,p2.x3) : pj.y3 = FNpj(p1.y3,p2.y3) pj.x4 = FNpj(p1.x4,p2.x4) : pj.y4 = FNpj(p1.y4,p2.y4) pj.x5 = FNpj(p1.x5,p2.x5) : pj.y5 = FNpj(p1.y5,p2.y5) FOR i = 1 TO movement_steps CLS p1.x1 += pj.x1 : p1.y1 += pj.y1 p1.x2 += pj.x2 : p1.y2 += pj.y2 p1.x3 += pj.x3 : p1.y3 += pj.y3 p1.x4 += pj.x4 : p1.y4 += pj.y4 p1.x5 += pj.x5 : p1.y5 += pj.y5 PSET (p1.x1,p1.y1) : StartX = POINT(0) : StartY = POINT(1) : LeftMostX = POINT(0) : LeftMostY = POINT(1) : LeftMostNear1X = -1 : LeftMostNear1Y = -1 : LeftMostNear2X = -1 : LeftMostNear2Y = -1 : PreviousX = POINT(0) : PreviousY = POINT(1) LINE - (p1.x2,p1.y2),14 : DoPostLine() LINE - (p1.x3,p1.y3),14 : DoPostLine() LINE - (p1.x4,p1.y4),14 : DoPostLine() LINE - (p1.x5,p1.y5),14 : DoPostLine() IF LeftMostNear1X = -1 THEN LeftMostNear1X = POINT(0) : LeftMostNear1Y = POINT(1) LINE - (StartX, StartY) ,14 : DoPostLine() IF LeftMostNear1Y < LeftMostNear2Y THEN LeftMostBuddyX = LeftMostNear1X : LeftMostBuddyY = LeftMostNear1Y ELSE LeftMostBuddyX = LeftMostNear2X : LeftMostBuddyY = LeftMostNear2Y END IF CIRCLE (p1.x1,p1.y1),5,16-1 CIRCLE (p1.x2,p1.y2),5,16-2 CIRCLE (p1.x3,p1.y3),5,16-3 CIRCLE (p1.x4,p1.y4),5,16-4 CIRCLE (p1.x5,p1.y5),5,16-5 _DELAY 0.01 NEXT i GOTO 🟡again