|
PUBLIC NUMERIC AR, AI, BR, BI, CR, CI, DR, DI,XMIN,XMAX,YMIN,YMAX,XSIZE,YSIZE
PUBLIC STRING F$
LET XMAX=-1E10
LET YMAX=-1E10
LET XMIN=1E10
LET YMIN=1E10
LET XSIZE=600
LET YSIZE=600
SET BITMAP SIZE XSIZE,YSIZE
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
LET N=15
!'INPUT PROMPT "LEVEL=": N
READ AR, AI, BR, BI, CR, CI, DR, DI
DATA 0,0,.5,.2887,0,0,.5,-.2887
!'DATA .5,.5,0,0,.5,-.5,0,0
!'DATA 0,0,.4,.5,0,0,.4,-.5
!'DATA 0,0,.5,.28867,0,0,.6667,0
!'DATA 0,.707,0,0,.5,0,0,0
!'DATA 0,0,.4614,.4614,.622,-.196,0,0
!'DATA .4614,.4614,0,0,0,0,.622,-.196
!'DATA .4614,.4614,0,0,0,0,.2896,-.585
!'DATA .4614,.4614,0,0,.622,-.196,0,0
!'DATA 0,0,0,.6667,0,0,.6667,0
CALL RECURSIVE(10,0,0,#1)
SET BITMAP SIZE XSIZE,YSIZE*(YMAX-YMIN)/(XMAX-XMIN)
SET WINDOW XMIN,XMAX,YMIN,YMAX
CLEAR
!'LET F$="再帰図形.svg"
IF F$<>"" THEN
OPEN #1:NAME F$
ERASE #1
PRINT #1:"<?xml version=";CHR$(34);"1.0";CHR$(34);" encoding=";CHR$(34);"utf-8";CHR$(34);"?>"
PRINT #1:"<!DOCTYPE svg PUBLIC ";CHR$(34);"-//W3C//DTD SVG 1.1//EN";CHR$(34);" ";CHR$(34);"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";CHR$(34);" ["
PRINT #1:" <!ENTITY ns_svg ";CHR$(34);"http://www.w3.org/2000/svg";CHR$(34);">"
PRINT #1:" <!ENTITY ns_xlink ";CHR$(34);"http://www.w3.org/1999/xlink";CHR$(34);">"
PRINT #1:"]>"
PRINT #1:"<svg version=";CHR$(34);"1.1";CHR$(34);" xmlns=";CHR$(34);"&ns_svg;";CHR$(34);" width=";CHR$(34);STR$(XSIZE);CHR$(34);" height=";CHR$(34);STR$(YSIZE);CHR$(34);" viewBox=";CHR$(34);"0 0 ";STR$(XSIZE);" ";STR$(YSIZE);CHR$(34)
PRINT #1:" overflow=";CHR$(34);"visible";CHR$(34);" enable-background=";CHR$(34);"new 0 0 ";STR$(XSIZE);" ";STR$(YSIZE);CHR$(34);" xml:space=";CHR$(34);"preserve";CHR$(34);">"
END IF
CALL RECURSIVE(N,0,0,#1)
IF F$<>"" THEN
PRINT #1:"</svg>"
CLOSE #1
END IF
END
EXTERNAL SUB RECURSIVE(N,X,Y,#1)
IF N>0 THEN
PLOT POINTS: X , Y
IF F$<>"" THEN PRINT #1:"<circle cx=";CHR$(34);STR$(PIXELX(X));CHR$(34);" cy=";CHR$(34);STR$(YSIZE-PIXELY(Y));CHR$(34);" r=";CHR$(34);"1";CHR$(34);" fill=";CHR$(34);"black";CHR$(34);" stroke=";CHR$(34);"black";CHR$(34);" stroke-width=";CHR$(34);"1";CHR$(34);" />"
LET XMIN=MIN(XMIN,X)
LET XMAX=MAX(XMAX,X)
LET YMIN=MIN(YMIN,Y)
LET YMAX=MAX(YMAX,Y)
CALL RECURSIVE(N-1,X * (AR + BR) - Y * (AI - BI), X * (AI + BI) + Y * (AR - BR),#1)
CALL RECURSIVE(N-1,X * (CR + DR) - Y * (CI - DI) - CR - DR + 1, X * (CI + DI) + Y * (CR - DR) - CI - DI,#1)
END IF
END SUB
|
|