|
グラフイックデモ。(星型)
トロコイドを星形で行ってみました。
パラメーターPOLYを5未満にすると円になります
'S'キーで画像セーブします
スペースキーで切り替えてください
CALL GINIT(800,800)
OPTION ANGLE DEGREES
DIM C(8),T(8),R(8),P(8),CL(10),M(8),S(8)
MAT READ C
READ CYCLE1,CYCLE2,CYCLE3,CYCLE4,CYCLE5,CYCLE6,CYCLE7,CYCLE8
DATA 1,2,3,4,5,6,7,8
DATA 1,2,3,4,5,6,7,8
MAT READ R
READ RADIUS1,RADIUS2,RADIUS3,RADIUS4,RADIUS5,RADIUS6,RADIUS7,RADIUS8
DATA 1,.5,0,0,0,0,0,0
DATA 1,.5,0,0,0,0,0,0
MAT READ P
READ POLY1,POLY2,POLY3,POLY4,POLY5,POLY6,POLY7,POLY8
DATA 5,5,5,5,5,5,5,5
DATA 5,5,5,5,5,5,5,5
MAT READ CL
READ COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10
DATA 1,2,3,4,8,9,10,11,5.5,7.5
DATA 1,2,3,4,8,9,10,11,5.5,7.5
MAT READ S
READ SIGN1,SIGN2,SIGN3,SIGN4,SIGN5,SIGN6,SIGN7,SIGN8
DATA 1,1,1,1,1,1,1,1
DATA 1,1,1,1,1,1,1,1
LET SP=3.01
LET SPEED=SP
LET SC=4.01
LET SCALE=SC
LET KEY$="PCRTKMX"
DO
FOR TH=0 TO 359 STEP SPEED
IF SAVE=0 THEN
IF GETKEYSTATE(ORD("S"))<0 THEN
LET SAVE=1
PRINT "セーブ開始"
EXIT FOR
END IF
FOR I=1 TO LEN(KEY$)
IF GETKEYSTATE(ORD(KEY$(I:I)))<0 THEN
LET PAGE=I-1
LET FLG=0
EXIT FOR
END IF
NEXT I
IF GETKEYSTATE(27)<0 THEN STOP
IF GETKEYSTATE(32)<0 THEN
DO
LOOP WHILE GETKEYSTATE(32)<0
LET PAGE=MOD(PAGE+1,7)
LET FLG=0
END IF
SELECT CASE PAGE
CASE 0 !'角数
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE 4 TO 10,AT P(1):POLY1
LOCATE VALUE NOWAIT(2),RANGE 4 TO 10,AT P(2):POLY2
LOCATE VALUE NOWAIT(3),RANGE 4 TO 10,AT P(3):POLY3
LOCATE VALUE NOWAIT(4),RANGE 4 TO 10,AT P(4):POLY4
LOCATE VALUE NOWAIT(5),RANGE 4 TO 10,AT P(5):POLY5
LOCATE VALUE NOWAIT(6),RANGE 4 TO 10,AT P(6):POLY6
LOCATE VALUE NOWAIT(7),RANGE 4 TO 10,AT P(7):POLY7
LOCATE VALUE NOWAIT(8),RANGE 4 TO 10,AT P(8):POLY8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):POLY1
LOCATE VALUE NOWAIT(2):POLY2
LOCATE VALUE NOWAIT(3):POLY3
LOCATE VALUE NOWAIT(4):POLY4
LOCATE VALUE NOWAIT(5):POLY5
LOCATE VALUE NOWAIT(6):POLY6
LOCATE VALUE NOWAIT(7):POLY7
LOCATE VALUE NOWAIT(8):POLY8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET P(1)=POLY1
LET P(2)=POLY2
LET P(3)=POLY3
LET P(4)=POLY4
LET P(5)=POLY5
LET P(6)=POLY6
LET P(7)=POLY7
LET P(8)=POLY8
LET SP=SPEED
LET SC=SCALE
END IF
CASE 1 !'周期
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE 0 TO 20,AT C(1):CYCLE1
LOCATE VALUE NOWAIT(2),RANGE 0 TO 20,AT C(2):CYCLE2
LOCATE VALUE NOWAIT(3),RANGE 0 TO 20,AT C(3):CYCLE3
LOCATE VALUE NOWAIT(4),RANGE 0 TO 20,AT C(4):CYCLE4
LOCATE VALUE NOWAIT(5),RANGE 0 TO 20,AT C(5):CYCLE5
LOCATE VALUE NOWAIT(6),RANGE 0 TO 20,AT C(6):CYCLE6
LOCATE VALUE NOWAIT(7),RANGE 0 TO 20,AT C(7):CYCLE7
LOCATE VALUE NOWAIT(8),RANGE 0 TO 20,AT C(8):CYCLE8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):CYCLE1
LOCATE VALUE NOWAIT(2):CYCLE2
LOCATE VALUE NOWAIT(3):CYCLE3
LOCATE VALUE NOWAIT(4):CYCLE4
LOCATE VALUE NOWAIT(5):CYCLE5
LOCATE VALUE NOWAIT(6):CYCLE6
LOCATE VALUE NOWAIT(7):CYCLE7
LOCATE VALUE NOWAIT(8):CYCLE8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET C(1)=CYCLE1
LET C(2)=CYCLE2
LET C(3)=CYCLE3
LET C(4)=CYCLE4
LET C(5)=CYCLE5
LET C(6)=CYCLE6
LET C(7)=CYCLE7
LET C(8)=CYCLE8
LET SP=SPEED
LET SC=SCALE
END IF
CASE 2 !'半径
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE 0 TO 1,AT R(1):RADIUS1
LOCATE VALUE NOWAIT(2),RANGE 0 TO 1,AT R(2):RADIUS2
LOCATE VALUE NOWAIT(3),RANGE 0 TO 1,AT R(3):RADIUS3
LOCATE VALUE NOWAIT(4),RANGE 0 TO 1,AT R(4):RADIUS4
LOCATE VALUE NOWAIT(5),RANGE 0 TO 1,AT R(5):RADIUS5
LOCATE VALUE NOWAIT(6),RANGE 0 TO 1,AT R(6):RADIUS6
LOCATE VALUE NOWAIT(7),RANGE 0 TO 1,AT R(7):RADIUS7
LOCATE VALUE NOWAIT(8),RANGE 0 TO 1,AT R(8):RADIUS8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):RADIUS1
LOCATE VALUE NOWAIT(2):RADIUS2
LOCATE VALUE NOWAIT(3):RADIUS3
LOCATE VALUE NOWAIT(4):RADIUS4
LOCATE VALUE NOWAIT(5):RADIUS5
LOCATE VALUE NOWAIT(6):RADIUS6
LOCATE VALUE NOWAIT(7):RADIUS7
LOCATE VALUE NOWAIT(8):RADIUS8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET R(1)=RADIUS1
LET R(2)=RADIUS2
LET R(3)=RADIUS3
LET R(4)=RADIUS4
LET R(5)=RADIUS5
LET R(6)=RADIUS6
LET R(7)=RADIUS7
LET R(8)=RADIUS8
LET SP=SPEED
LET SC=SCALE
END IF
CASE 3 !'開始角度
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE 0 TO 359,AT T(1):ROT1
LOCATE VALUE NOWAIT(2),RANGE 0 TO 359,AT T(2):ROT2
LOCATE VALUE NOWAIT(3),RANGE 0 TO 359,AT T(3):ROT3
LOCATE VALUE NOWAIT(4),RANGE 0 TO 359,AT T(4):ROT4
LOCATE VALUE NOWAIT(5),RANGE 0 TO 359,AT T(5):ROT5
LOCATE VALUE NOWAIT(6),RANGE 0 TO 359,AT T(6):ROT6
LOCATE VALUE NOWAIT(7),RANGE 0 TO 359,AT T(7):ROT7
LOCATE VALUE NOWAIT(8),RANGE 0 TO 359,AT T(8):ROT8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):ROT1
LOCATE VALUE NOWAIT(2):ROT2
LOCATE VALUE NOWAIT(3):ROT3
LOCATE VALUE NOWAIT(4):ROT4
LOCATE VALUE NOWAIT(5):ROT5
LOCATE VALUE NOWAIT(6):ROT6
LOCATE VALUE NOWAIT(7):ROT7
LOCATE VALUE NOWAIT(8):ROT8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET T(1)=ROT1
LET T(2)=ROT2
LET T(3)=ROT3
LET T(4)=ROT4
LET T(5)=ROT5
LET T(6)=ROT6
LET T(7)=ROT7
LET T(8)=ROT8
LET SP=SPEED
LET SC=SCALE
END IF
CASE 4 !'色
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE 0 TO 255,AT CL(1):COL1
LOCATE VALUE NOWAIT(2),RANGE 0 TO 255,AT CL(2):COL2
LOCATE VALUE NOWAIT(3),RANGE 0 TO 255,AT CL(3):COL3
LOCATE VALUE NOWAIT(4),RANGE 0 TO 255,AT CL(4):COL4
LOCATE VALUE NOWAIT(5),RANGE 0 TO 255,AT CL(5):COL5
LOCATE VALUE NOWAIT(6),RANGE 0 TO 255,AT CL(6):COL6
LOCATE VALUE NOWAIT(7),RANGE 0 TO 255,AT CL(7):COL7
LOCATE VALUE NOWAIT(8),RANGE 0 TO 255,AT CL(8):COL8
LOCATE VALUE NOWAIT(9),RANGE 0 TO 255,AT CL(9):COL9
LOCATE VALUE NOWAIT(10),RANGE 0 TO 255,AT CL(10):COL10
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):COL1
LOCATE VALUE NOWAIT(2):COL2
LOCATE VALUE NOWAIT(3):COL3
LOCATE VALUE NOWAIT(4):COL4
LOCATE VALUE NOWAIT(5):COL5
LOCATE VALUE NOWAIT(6):COL6
LOCATE VALUE NOWAIT(7):COL7
LOCATE VALUE NOWAIT(8):COL8
LOCATE VALUE NOWAIT(9):COL9
LOCATE VALUE NOWAIT(10):COL10
LET CL(1)=COL1
LET CL(2)=COL2
LET CL(3)=COL3
LET CL(4)=COL4
LET CL(5)=COL5
LET CL(6)=COL6
LET CL(7)=COL7
LET CL(8)=COL8
LET CL(9)=COL9
LET CL(10)=COL10
END IF
CASE 5 !'平行移動
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE -1 TO 1,AT M(1):MOVE1
LOCATE VALUE NOWAIT(2),RANGE -1 TO 1,AT M(2):MOVE2
LOCATE VALUE NOWAIT(3),RANGE -1 TO 1,AT M(3):MOVE3
LOCATE VALUE NOWAIT(4),RANGE -1 TO 1,AT M(4):MOVE4
LOCATE VALUE NOWAIT(5),RANGE -1 TO 1,AT M(5):MOVE5
LOCATE VALUE NOWAIT(6),RANGE -1 TO 1,AT M(6):MOVE6
LOCATE VALUE NOWAIT(7),RANGE -1 TO 1,AT M(7):MOVE7
LOCATE VALUE NOWAIT(8),RANGE -1 TO 1,AT M(8):MOVE8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):MOVE1
LOCATE VALUE NOWAIT(2):MOVE2
LOCATE VALUE NOWAIT(3):MOVE3
LOCATE VALUE NOWAIT(4):MOVE4
LOCATE VALUE NOWAIT(5):MOVE5
LOCATE VALUE NOWAIT(6):MOVE6
LOCATE VALUE NOWAIT(7):MOVE7
LOCATE VALUE NOWAIT(8):MOVE8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET M(1)=MOVE1
LET M(2)=MOVE2
LET M(3)=MOVE3
LET M(4)=MOVE4
LET M(5)=MOVE5
LET M(6)=MOVE6
LET M(7)=MOVE7
LET M(8)=MOVE8
LET SP=SPEED
LET SC=SCALE
END IF
CASE 6 !'回転の向き
IF FLG=0 THEN
LOCATE VALUE NOWAIT(1),RANGE -1 TO 1,AT S(1):SIGN1
LOCATE VALUE NOWAIT(2),RANGE -1 TO 1,AT S(2):SIGN2
LOCATE VALUE NOWAIT(3),RANGE -1 TO 1,AT S(3):SIGN3
LOCATE VALUE NOWAIT(4),RANGE -1 TO 1,AT S(4):SIGN4
LOCATE VALUE NOWAIT(5),RANGE -1 TO 1,AT S(5):SIGN5
LOCATE VALUE NOWAIT(6),RANGE -1 TO 1,AT S(6):SIGN6
LOCATE VALUE NOWAIT(7),RANGE -1 TO 1,AT S(7):SIGN7
LOCATE VALUE NOWAIT(8),RANGE -1 TO 1,AT S(8):SIGN8
LOCATE VALUE NOWAIT(9),RANGE 1 TO 20,AT SP:SPEED
LOCATE VALUE NOWAIT(10),RANGE 1 TO 10,AT SC:SCALE
LET FLG=1
ELSE
LOCATE VALUE NOWAIT(1):SIGN1
LOCATE VALUE NOWAIT(2):SIGN2
LOCATE VALUE NOWAIT(3):SIGN3
LOCATE VALUE NOWAIT(4):SIGN4
LOCATE VALUE NOWAIT(5):SIGN5
LOCATE VALUE NOWAIT(6):SIGN6
LOCATE VALUE NOWAIT(7):SIGN7
LOCATE VALUE NOWAIT(8):SIGN8
LOCATE VALUE NOWAIT(9):SPEED
LOCATE VALUE NOWAIT(10):SCALE
LET S(1)=SIGN1
LET S(2)=SIGN2
LET S(3)=SIGN3
LET S(4)=SIGN4
LET S(5)=SIGN5
LET S(6)=SIGN6
LET S(7)=SIGN7
LET S(8)=SIGN8
LET SP=SPEED
LET SC=SCALE
END IF
END SELECT
END IF
SET WINDOW -SCALE,SCALE,-SCALE,SCALE
LET POLY1=INT(POLY1)
LET POLY2=INT(POLY2)
LET POLY3=INT(POLY3)
LET POLY4=INT(POLY4)
LET POLY5=INT(POLY5)
LET POLY6=INT(POLY6)
LET POLY7=INT(POLY7)
LET POLY8=INT(POLY8)
LET CYCLE1=INT(CYCLE1)
LET CYCLE2=INT(CYCLE2)
LET CYCLE3=INT(CYCLE3)
LET CYCLE4=INT(CYCLE4)
LET CYCLE5=INT(CYCLE5)
LET CYCLE6=INT(CYCLE6)
LET CYCLE7=INT(CYCLE7)
LET CYCLE8=INT(CYCLE8)
LET COL1=INT(COL1)
LET COL2=INT(COL2)
LET COL3=INT(COL3)
LET COL4=INT(COL4)
LET COL5=INT(COL5)
LET COL6=INT(COL6)
LET COL7=INT(COL7)
LET COL8=INT(COL8)
LET COL9=INT(COL9)
LET COL10=INT(COL10)
IF SIGN1>=0 THEN LET SIGN1=1 ELSE LET SIGN1=-1
IF SIGN2>=0 THEN LET SIGN2=1 ELSE LET SIGN2=-1
IF SIGN3>=0 THEN LET SIGN3=1 ELSE LET SIGN3=-1
IF SIGN4>=0 THEN LET SIGN4=1 ELSE LET SIGN4=-1
IF SIGN5>=0 THEN LET SIGN5=1 ELSE LET SIGN5=-1
IF SIGN6>=0 THEN LET SIGN6=1 ELSE LET SIGN6=-1
IF SIGN7>=0 THEN LET SIGN7=1 ELSE LET SIGN7=-1
IF SIGN8>=0 THEN LET SIGN8=1 ELSE LET SIGN8=-1
LET SPEED=INT(SPEED)
IF SPEED<>SPE THEN
LET SPE=SPEED
EXIT FOR
END IF
CLEAR
DRAW GRID
LET X1=0
LET Y1=0
LET X2=FX(POLY1,CYCLE1,RADIUS1+MOVE1,TH*SIGN1,ROT1)
LET Y2=FY(POLY1,CYCLE1,RADIUS1+MOVE1,TH*SIGN1,ROT1)
LET X3=X2+FX(POLY2,CYCLE2,RADIUS2+MOVE2,TH*SIGN2,ROT2)
LET Y3=Y2+FY(POLY2,CYCLE2,RADIUS2+MOVE2,TH*SIGN2,ROT2)
LET X4=X3+FX(POLY3,CYCLE3,RADIUS3+MOVE3,TH*SIGN3,ROT3)
LET Y4=Y3+FY(POLY3,CYCLE3,RADIUS3+MOVE3,TH*SIGN3,ROT3)
LET X5=X4+FX(POLY4,CYCLE4,RADIUS4+MOVE4,TH*SIGN4,ROT4)
LET Y5=Y4+FY(POLY4,CYCLE4,RADIUS4+MOVE4,TH*SIGN4,ROT4)
LET X6=X5+FX(POLY5,CYCLE5,RADIUS5+MOVE5,TH*SIGN5,ROT5)
LET Y6=Y5+FY(POLY5,CYCLE5,RADIUS5+MOVE5,TH*SIGN5,ROT5)
LET X7=X6+FX(POLY6,CYCLE6,RADIUS6+MOVE6,TH*SIGN6,ROT6)
LET Y7=Y6+FY(POLY6,CYCLE6,RADIUS6+MOVE6,TH*SIGN6,ROT6)
LET X8=X7+FX(POLY7,CYCLE7,RADIUS7+MOVE7,TH*SIGN7,ROT7)
LET Y8=Y7+FY(POLY7,CYCLE7,RADIUS7+MOVE7,TH*SIGN7,ROT7)
LET X9=X8+FX(POLY8,CYCLE8,RADIUS8+MOVE8,TH*SIGN8,ROT8)
LET Y9=Y8+FY(POLY8,CYCLE8,RADIUS8+MOVE8,TH*SIGN8,ROT8)
CALL POLY(X1,Y1,RADIUS1,COL1,POLY1,ROT1)
CALL POLY(X2,Y2,RADIUS2,COL2,POLY2,ROT2)
CALL POLY(X3,Y3,RADIUS3,COL3,POLY3,ROT3)
CALL POLY(X4,Y4,RADIUS4,COL4,POLY4,ROT4)
CALL POLY(X5,Y5,RADIUS5,COL5,POLY5,ROT5)
CALL POLY(X6,Y6,RADIUS6,COL6,POLY6,ROT6)
CALL POLY(X7,Y7,RADIUS7,COL7,POLY7,ROT7)
CALL POLY(X8,Y8,RADIUS8,COL8,POLY8,ROT8)
SET LINE COLOR COL9
PLOT LINES:X1,Y1;X2,Y2;X3,Y3;X4,Y4;X5,Y5;X6,Y6;X7,Y7;X8,Y8;X9,Y9
SET LINE COLOR COL10
PLOT LINES
FOR TT=0 TO TH
LET X= FX(POLY1,CYCLE1,RADIUS1+MOVE1,TT*SIGN1,ROT1)+FX(POLY2,CYCLE2,RADIUS2+MOVE2,TT*SIGN2,ROT2)+FX(POLY3,CYCLE3,RADIUS3+MOVE3,TT*SIGN3,ROT3)+FX(POLY4,CYCLE4,RADIUS4+MOVE4,TT*SIGN4,ROT4)
LET Y= FY(POLY1,CYCLE1,RADIUS1+MOVE1,TT*SIGN1,ROT1)+FY(POLY2,CYCLE2,RADIUS2+MOVE2,TT*SIGN2,ROT2)+FY(POLY3,CYCLE3,RADIUS3+MOVE3,TT*SIGN3,ROT3)+FY(POLY4,CYCLE4,RADIUS4+MOVE4,TT*SIGN4,ROT4)
LET X=X+FX(POLY5,CYCLE5,RADIUS5+MOVE5,TT*SIGN5,ROT5)+FX(POLY6,CYCLE6,RADIUS6+MOVE6,TT*SIGN6,ROT6)+FX(POLY7,CYCLE7,RADIUS7+MOVE7,TT*SIGN7,ROT7)+FX(POLY8,CYCLE8,RADIUS8+MOVE8,TT*SIGN8,ROT8)
LET Y=Y+FY(POLY5,CYCLE5,RADIUS5+MOVE5,TT*SIGN5,ROT5)+FY(POLY6,CYCLE6,RADIUS6+MOVE6,TT*SIGN6,ROT6)+FY(POLY7,CYCLE7,RADIUS7+MOVE7,TT*SIGN7,ROT7)+FY(POLY8,CYCLE8,RADIUS8+MOVE8,TT*SIGN8,ROT8)
PLOT LINES:X,Y;
NEXT TT
SET DRAW MODE EXPLICIT
IF SAVE=1 THEN
LET KK=KK+1
GSAVE "image"&USING$("%%%%%",KK)&".png"
PRINT "No.";KK
END IF
WAIT DELAY .1
SET DRAW MODE HIDDEN
NEXT TH
LOOP UNTIL SAVE=1 AND TH=>359
END
EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0 , XSIZE-1 , YSIZE-1, 0
SET POINT STYLE 1
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
CLEAR
END SUB
EXTERNAL FUNCTION FX(M,N,R,T,ROT)
OPTION ANGLE DEGREES
IF M>=5 THEN
LET A=360/M
LET FX=R*COS(T*N+ROT)*COS(A)/COS(A-1/M*ACOS(COS(N*M*T)))
ELSE
LET FX=R*COS(T*N+ROT)
END IF
END FUNCTION
EXTERNAL FUNCTION FY(M,N,R,T,ROT)
OPTION ANGLE DEGREES
IF M>=5 THEN
LET A=360/M
LET FY=R*SIN(T*N+ROT)*COS(A)/COS(A-1/M*ACOS(COS(N*M*T)))
ELSE
LET FY=R*SIN(T*N+ROT)
END IF
END FUNCTION
EXTERNAL SUB POLY(X,Y,R,C,M,ROT)
OPTION ANGLE DEGREES
SET LINE COLOR C
PLOT LINES
IF R>0 THEN
FOR T=0 TO 360
IF M>=5 THEN
LET A=360/M
LET XX=X+R*COS(T+ROT)*COS(A)/COS(A-1/M*ACOS(COS(M*T)))
LET YY=Y+R*SIN(T+ROT)*COS(A)/COS(A-1/M*ACOS(COS(M*T)))
ELSE
LET XX=X+R*COS(T)
LET YY=Y+R*SIN(T)
END IF
PLOT LINES:XX,YY;
NEXT T
END IF
PLOT LINES
END SUB
|
|