ケーリーツリー

 投稿者:しばっち  投稿日:2011年 8月14日(日)23時32分52秒
  INPUT  PROMPT "LEVEL=":N
LET L=500
FILE GETSAVENAME F$,"dxfファイル|*.dxf"
IF F$="" THEN STOP
IF RIGHT$(F$,1)="!" THEN LET F$=F$(1:LEN(F$)-1) & "ケーリーツリー" & STR$(N)
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"
CALL TREE(N,0,0,0,0,L,0,L,#1)
PRINT #1:"0"
PRINT #1:"ENDSEC"
PRINT #1:"0"
PRINT #1:"EOF"
CLOSE #1
END

EXTERNAL  SUB TREE(N,XS,YS,ZS,XE,YE,ZE,L,#1)
IF N>0 THEN
   CALL TUBE(#1,XS,YS,ZS,XE,YE,ZE,10)
   LET X=XE-XS
   LET Y=YE-YS
   LET Z=ZE-ZS
   IF X<>0 THEN
      CALL TREE(N-1,XE,YE,ZE,XE,YE,ZE+L/2,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE,ZE-L.2,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE+L/2,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE-L/2,ZE,L/2,#1)
   END IF
   IF Y<>0 THEN
      CALL TREE(N-1,XE,YE,ZE,XE+L/2,YE,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE-L/2,YE,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE,ZE+L/2,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE,ZE-L/2,L/2,#1)
   END IF
   IF Z<>0 THEN
      CALL TREE(N-1,XE,YE,ZE,XE+L/2,YE,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE-L/2,YE,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE+L/2,ZE,L/2,#1)
      CALL TREE(N-1,XE,YE,ZE,XE,YE-L/2,ZE,L/2,#1)
   END IF
END IF
END SUB

以下省略

EXTERNAL  SUB TUBE(#1,X0,Y0,Z0,X1,Y1,Z1,LL) !'チューブ(蓋なし)
END SUB

EXTERNAL  SUB ROTATE(XX,YY,ZZ,X0,Y0,Z0,TH,NX,NY,NZ) !'任意軸回転(ロドリグの公式)
END SUB
 

戻る