PLOT POINTS文とMAT PLOT CELLS文との速度比較について

 投稿者:しばっち  投稿日:2020年 5月24日(日)14時26分44秒
  これはWindows版BASICの場合ですが
PLOT POINTS文とMAT PLOT CELLS文とでは
動作モードにもよるがMAT PLOT CELLS文で描画するほうが断然速い。
2進モードでは30倍も速い


LET XSIZE=800
LET YSIZE=800
CALL GINIT(XSIZE,YSIZE)
LET T=TIME
!!!SET DRAW MODE HIDDEN !ここの注釈を外すと5倍程速くなる
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET C=INT(RND*255)
      SET POINT COLOR C
      PLOT POINTS:X,Y
   NEXT X
NEXT Y
!!!SET DRAW MODE EXPLICIT
LET L=TIME-T
PRINT L

OPTION BASE 0
DIM M(XSIZE-1,YSIZE-1)
CLEAR
LET T=TIME
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET C=INT(RND*255)
      LET M(X,Y)=C
   NEXT X
NEXT Y
MAT PLOT CELLS,IN 0,0; XSIZE-1,YSIZE-1 :M
LET P=TIME-T
PRINT P
PRINT L/P
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
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


            実行結果


5.38999999999942
.160000000003492
33.687499999261

MAT PLOT CELLS文を使用して
下記のようにスクロールアニメができます。

RANDOMIZE
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
LET WIDTH=600 !'ウィンドゥサイズ
LET HEIGHT=600
OPTION BASE 0
DIM MM(WIDTH,HEIGHT),M(XSIZE,YSIZE)
ASK PIXEL ARRAY (0,0) M
CALL GINIT(WIDTH,HEIGHT)
DO
   LET N=INT(RND*50)+10
   LET XR=INT(RND*30-15)
   LET YR=INT(RND*30-15)
   FOR I=1 TO N
      FOR Y=0 TO HEIGHT-1
         FOR X=0 TO WIDTH-1
            LET MM(X,Y)=M(MOD(X+XX,XSIZE),MOD(Y+YY,YSIZE))
         NEXT  X
      NEXT Y
      MAT PLOT CELLS,IN 0,0; WIDTH-1,HEIGHT-1:MM
      LET XX=MOD(XX+XR,XSIZE)
      LET YY=MOD(YY+YR,YSIZE)
   NEXT I
LOOP
END

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

戻る