セルオートマトン

 投稿者:しばっち  投稿日:2011年 8月14日(日)23時25分29秒
  !'ボクセル表現(VOXEL)
LET N=32
DIM A(-N TO N,-N TO N),B(-N TO N,-N TO N)
FILE GETSAVENAME F$,"dxfファイル|*.dxf"
IF F$="" THEN STOP
IF POS(UCASE$(F$),".DXF")=0 THEN LET F$=F$ & ".dxf"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"0"
PRINT #1:"SECTION"
PRINT #1:"2"
PRINT #1:"ENTITIES"
!'--------------------------------------
LET A(0,0)=1 !'初期値
CALL CUBE(#1,0,N-1,0,1)
!'--------------------------------------
!'LET A(-N/4,-N/4)=1 !'初期値(4点)
!'CALL CUBE(#1,-N/4,N-1,-N/4,1)
!'LET A(N/4,N/4)=1
!'CALL CUBE(#1,N/4,N-1,N/4,1)
!'LET A(-N/4,N/4)=1
!'CALL CUBE(#1,-N/4,N-1,N/4,1)
!'LET A(N/4,-N/4)=1
!'CALL CUBE(#1,N/4,N-1,-N/4,1)
!'--------------------------------------
FOR Y=N-2 TO 0 STEP -1
   FOR X=-N+1 TO N-1
      FOR Z=-N+1 TO N-1
         LET  B(X,Z)=MOD(A(X-1,Z-1)+A(X-1,Z+1)+A(X+1,Z+1)+A(X+1,Z-1),2)
         !'LET  B(X,Z)=MOD(A(X-1,Z-1)+A(X-1,Z)+A(X-1,Z+1)+A(X,Z-1)+A(X,Z)+A(X,Z+1)+A(X+1,Z-1)+A(X+1,Z)+A(X+1,Z+1),2)
         IF B(X,Z)<>0 THEN CALL CUBE(#1,X,Y,Z,1)
      NEXT Z
   NEXT X
   MAT A=B
NEXT Y
PRINT #1:"0"
PRINT #1:"ENDSEC"
PRINT #1:"0"
PRINT #1:"EOF"
CLOSE #1
END

以下省略
EXTERNAL  SUB CUBE(#1,X,Y,Z,L)
END SUB
 
 

戻る