!なぜ、こうなるのか?

 投稿者:SECOND  投稿日:2009年10月13日(火)08時07分56秒
  !なぜ、こうなるのか?

OPTION ARITHMETIC NATIVE
OPTION BASE 0
DIM D8(500,500)
!
SET VIEWPORT 0, 0.4, 0.6, 1
CALL sample(DX$,DY$)
LET DX=VAL(DX$)
LET DY=VAL(DY$)
MAT D8=ZER(DX,DY)
!
SET VIEWPORT 0, 1, 0, 1
SET WINDOW 0, 500, 500, 0
!
! SET COLOR MODE "NATIVE" ! ←これを入れると正常にコピーされる。
!
ASK PIXEL ARRAY (0,0) D8
MAT PLOT CELLS,IN 250,250; 450,450: D8
!
!main00
!   (
!    )
END

EXTERNAL SUB sample(DX$,DY$)
! マンデルブロー(Complex\mandelbm.bas の着色改変)
OPTION ARITHMETIC COMPLEX
SET COLOR MODE "REGULAR"
SET POINT STYLE 1
FOR n=0 TO 50
   SET COLOR MIX(    n) 0   ,0     ,n/51   !BLACK =< < BLUE
   SET COLOR MIX( 51+n) 0   ,n/51  ,1      !BLUE =< < CYAN
   SET COLOR MIX(102+n) 0   ,1     ,1-n/51 !CYAN =< < GREEN
   SET COLOR MIX(153+n) n/51,1     ,0      !GREEN =< < YELLOW
   SET COLOR MIX(204+n) 1   ,1-n/51,0      !YELLOW =< < RED
NEXT n
LET XL=-2
LET XR=.8
LET w1=XR-XL
LET w2=w1/2
SET WINDOW XL, XR,-w2,w2
ASK PIXEL SIZE(XL,-w2; XR,w2) px,py
!
FOR x=XL TO XR STEP w1/(px-1)
   FOR y=-w2-.49*w1/(py-1) TO w2 STEP w1/(py-1) !故意に(x,0)を描点の間に挟む。
      LET z=0
      FOR n=1 TO 255
         LET z=z^2+COMPLEX(x,y)
         IF 2< ABS(z) THEN
            IF n< 64 THEN SET POINT COLOR n*4 ELSE SET POINT COLOR 255
            PLOT POINTS :x,y !上下の対象プロットをしない。
            EXIT FOR
         END IF
      NEXT n
   NEXT y
NEXT x
LET DX$=STR$(px-1)
LET DY$=STR$(py-1)
END SUB

!※色指標まで、複素数になるのでしょうか。
 

Re: !なぜ、こうなるのか?

 投稿者:白石 和夫  投稿日:2009年10月13日(火)10時29分29秒
  > No.638[元記事へ]

ASK PIXEL ARRAYは,該当する色指標が存在しないと-1を代入します。
もともとの背景色(白)に対応する色指標が失われてしまったので,その部分の色指標が-1として取得されています。
ASK PIXEL ARRAY (0,0) D8
の後に
MAT PRINT D8;
を追加してみるとわかると思います。
なお,MAT PLOT CELLS は-1に出会うとその行のそれ以後の描画をサボります。(修正すべき事項かもしれません)
 

Re: !なぜ、こうなるのか?

 投稿者:SECOND  投稿日:2009年10月13日(火)14時00分40秒
  > No.640[元記事へ]

解りました、ありがとうございました。描点しない範囲を、すっかり忘れていました。
 

戻る