|
切頭12面体を表示します(Zソート)
OPTION ANGLE DEGREES
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
DIM X0(200),Y0(200),Z0(200),X1(200),Y1(200),Z1(200),X2(200),Y2(200),Z2(200),KEY(200),INDEX(200)
DIM P0(4),P1(4),P2(4)
DIM L(4),M(4),N(3)
DIM Q(4,4),ROTX(4,4),ROTY(4,4)
DIM XX(100),YY(100),ZZ(100)
LOCATE VALUE NOWAIT(1),RANGE 1 TO 10,AT 5:SCALE
LOCATE VALUE NOWAIT(2),RANGE -360 TO 360,AT 0:XTH
LOCATE VALUE NOWAIT(3),RANGE -360 TO 360,AT 0:YTH
LOCATE VALUE NOWAIT(4),RANGE -360 TO 360,AT 0:ZTH
DO
LOCATE VALUE NOWAIT(1):SCALE
LOCATE VALUE NOWAIT(2):XTH
LOCATE VALUE NOWAIT(3):YTH
LOCATE VALUE NOWAIT(4):ZTH
SET WINDOW -SCALE,SCALE,-SCALE,SCALE
RESTORE
FOR I=1 TO 60
READ XX(I),YY(I),ZZ(I)
NEXT I
DATA -.16838141 , .83850515 ,-.51822468 !'座標データ
DATA -.44082824 , .83850515 ,-.32028047
DATA -.54489368 , .83850515 , 0
DATA -.44082824 , .83850515 , .32028047
DATA -.16838141 , .83850515 , .51822468
DATA .16838141 , .83850515 , .51822468
DATA .44082824 , .83850515 , .32028047
DATA .54489368 , .83850515 , 0
DATA .44082824 , .83850515 ,-.32028047
DATA .16838141 , .83850515 ,-.51822468
DATA 0 , .66145846 ,-.7499818
DATA 0 , .3749909 ,-.92702849
DATA .16838141 , .08852334 ,-.98173893
DATA .44082824 ,-.08852334 ,-.89321558
DATA .71327508 ,-.08852334 ,-.69527137
DATA .88165649 , .08852334 ,-.46351425
DATA .88165649 , .3749909 ,-.28646756
DATA .71327508 , .66145846 ,-.23175712
DATA -.16838141 , .08852334 ,-.98173893
DATA -.44082824 ,-.08852334 ,-.89321558
DATA -.71327508 ,-.08852334 ,-.69527137
DATA -.88165649 , .08852334 ,-.46351425
DATA -.88165649 , .3749909 ,-.28646756
DATA -.71327508 , .66145846 ,-.23175712
DATA -.98572192 , .08852334 ,-.14323378
DATA -.98572192 ,-.08852334 , .14323378
DATA -.88165649 ,-.08852334 , .46351425
DATA -.71327508 , .08852334 , .69527137
DATA -.54489368 , .3749909 , .7499818
DATA -.44082824 , .66145846 , .60674802
DATA -.44082824 , .08852334 , .89321558
DATA -.16838141 ,-.08852334 , .98173893
DATA .16838141 ,-.08852334 , .98173893
DATA .44082824 , .08852334 , .89321558
DATA .54489368 , .3749909 , .7499818
DATA .44082824 , .66145846 , .60674802
DATA .71327508 , .08852334 , .69527137
DATA .88165649 ,-.08852334 , .46351425
DATA .98572192 ,-.08852334 , .14323378
DATA .98572192 , .08852334 ,-.14323378
DATA .54489368 ,-.3749909 ,-.7499818
DATA .44082824 ,-.66145846 ,-.60674802
DATA .16838141 ,-.83850515 ,-.51822468
DATA -.16838141 ,-.83850515 ,-.51822468
DATA -.44082824 ,-.66145846 ,-.60674802
DATA -.54489368 ,-.3749909 ,-.7499818
DATA -.44082824 ,-.83850515 ,-.32028047
DATA -.54489367 ,-.83850515 , 0
DATA -.71327508 ,-.66145846 , .23175712
DATA -.88165649 ,-.3749909 , .28646756
DATA -.44082824 ,-.83850515 , .32028047
DATA -.16838141 ,-.83850515 , .51822468
DATA 0 ,-.66145846 , .7499818
DATA 0 ,-.3749909 , .92702849
DATA .16838141 ,-.83850515 , .51822468
DATA .44082824 ,-.83850515 , .32028047
DATA .71327508 ,-.66145846 , .23175712
DATA .88165649 ,-.3749909 , .28646756
DATA .54489368 ,-.83850515 , 0
DATA .44082824 ,-.83850515 ,-.32028047
FOR I=1 TO 116
READ A,B,C
LET X0(I)=XX(A)
LET Y0(I)=YY(A)
LET Z0(I)=ZZ(A)
LET X1(I)=XX(B)
LET Y1(I)=YY(B)
LET Z1(I)=ZZ(B)
LET X2(I)=XX(C)
LET Y2(I)=YY(C)
LET Z2(I)=ZZ(C)
NEXT I
DATA 1,2,24 !'メッシュデータ
DATA 1,24,23
DATA 1,23,22
DATA 1,22,21
DATA 1,21,20
DATA 1,20,19
DATA 1,19,12
DATA 1,12,11
DATA 1,11,10
DATA 1,10,9
DATA 1,9,8
DATA 1,8,7
DATA 1,7,6
DATA 1,6,5
DATA 1,5,4
DATA 1,4,3
DATA 1,3,2
DATA 2,3,24
DATA 3,4,30
DATA 3,30,29
DATA 3,29,28
DATA 3,28,27
DATA 3,27,26
DATA 3,26,25
DATA 3,25,23
DATA 3,23,24
DATA 4,5,30
DATA 5,6,36
DATA 5,36,35
DATA 5,35,34
DATA 5,34,33
DATA 5,33,32
DATA 5,32,31
DATA 5,31,29
DATA 5,29,30
DATA 6,7,36
DATA 7,8,18
DATA 7,18,17
DATA 7,17,40
DATA 7,40,39
DATA 7,39,38
DATA 7,38,37
DATA 7,37,35
DATA 7,35,36
DATA 8,9,18
DATA 9,10,11
DATA 9,11,12
DATA 9,12,13
DATA 9,13,14
DATA 9,14,15
DATA 9,15,16
DATA 9,16,17
DATA 9,17,18
DATA 12,19,13
DATA 13,19,20
DATA 13,20,46
DATA 13,46,45
DATA 13,45,44
DATA 13,44,43
DATA 13,43,42
DATA 13,42,41
DATA 13,41,14
DATA 14,41,15
DATA 15,41,42
DATA 15,42,60
DATA 15,60,59
DATA 15,59,57
DATA 15,57,58
DATA 15,58,39
DATA 15,39,40
DATA 15,40,16
DATA 16,40,17
DATA 20,21,46
DATA 21,22,25
DATA 21,25,26
DATA 21,26,50
DATA 21,50,49
DATA 21,49,48
DATA 21,48,47
DATA 21,47,45
DATA 21,45,46
DATA 22,23,25
DATA 26,27,50
DATA 27,28,31
DATA 27,31,32
DATA 27,32,54
DATA 27,54,53
DATA 27,53,52
DATA 27,52,51
DATA 27,51,49
DATA 27,49,50
DATA 28,29,31
DATA 32,33,54
DATA 33,34,37
DATA 33,37,38
DATA 33,38,58
DATA 33,58,57
DATA 33,57,56
DATA 33,56,55
DATA 33,55,53
DATA 33,53,54
DATA 34,35,37
DATA 38,39,58
DATA 42,43,60
DATA 43,44,47
DATA 43,47,48
DATA 43,48,51
DATA 43,51,52
DATA 43,52,55
DATA 43,55,56
DATA 43,56,59
DATA 43,59,60
DATA 44,45,47
DATA 48,49,51
DATA 52,53,55
DATA 56,57,59
MAT ROTX=IDN ! x軸のまわりの回転
LET ROTX(2,2)=COS(XTH)
LET ROTX(2,3)=SIN(XTH)
LET ROTX(3,2)=-SIN(XTH)
LET ROTX(3,3)=COS(XTH)
MAT ROTY=IDN ! y軸のまわりの回転
LET ROTY(1,1)=COS(YTH)
LET ROTY(1,3)=-SIN(YTH)
LET ROTY(3,1)=SIN(YTH)
LET ROTY(3,3)=COS(YTH)
MAT Q=ROTATE(ZTH)
MAT Q=Q*ROTY*ROTX
SET DRAW MODE HIDDEN
CLEAR
FOR I=1 TO 116
LET P0(1)=X0(I)
LET P0(2)=Y0(I)
LET P0(3)=Z0(I)
LET P1(1)=X1(I)
LET P1(2)=Y1(I)
LET P1(3)=Z1(I)
LET P2(1)=X2(I)
LET P2(2)=Y2(I)
LET P2(3)=Z2(I)
LET P0(4),P1(4),P2(4)=1
MAT P0=P0*Q
MAT P1=P1*Q
MAT P2=P2*Q
MAT L=P2-P1
MAT M=P1-P0
LET X0(I)=P0(1)
LET Y0(I)=P0(2)
LET Z0(I)=P0(3)
LET X1(I)=P1(1)
LET Y1(I)=P1(2)
LET Z1(I)=P1(3)
LET X2(I)=P2(1)
LET Y2(I)=P2(2)
LET Z2(I)=P2(3)
LET KEY(I)=(Z0(I)+Z1(I)+Z2(I))/3 !'各頂点のZ座標値の平均
LET INDEX(I)=I
NEXT I
CALL QUICKSORT(1,116,KEY,INDEX) !'Zソート
SET DRAW MODE HIDDEN
CLEAR
FOR I=1 TO 116
LET P0(1)=X0(INDEX(I))
LET P0(2)=Y0(INDEX(I))
LET P0(3)=Z0(INDEX(I))
LET P1(1)=X1(INDEX(I))
LET P1(2)=Y1(INDEX(I))
LET P1(3)=Z1(INDEX(I))
LET P2(1)=X2(INDEX(I))
LET P2(2)=Y2(INDEX(I))
LET P2(3)=Z2(INDEX(I))
MAT L=P2-P1
MAT M=P1-P0
CALL OUTER(N,L,M)
CALL SETBRIGHTNESS(N)
CALL PLOT3(P0,P1,P2)
NEXT I
SET DRAW MODE EXPLICIT
LOOP
END
EXTERNAL SUB PLOT3(P0(),P1(),P2()) !'3角形描画
PLOT AREA :P0(1),P0(2);P1(1),P1(2);P2(1),P2(2)
END SUB
EXTERNAL SUB SETBRIGHTNESS(N())
DIM LIGHT(3)
MAT READ LIGHT ! 光源の向き
DATA 1,1,1
LET S=DOT(LIGHT,N)/(SQR(DOT(LIGHT,LIGHT))*SQR(DOT(N,N)))
LET S=(S+1)/2
SET COLOR MIX(8) S,S,S
SET AREA COLOR 8
END SUB
EXTERNAL SUB OUTER(C(),A(),B()) !'外積
LET C(1)=A(2)*B(3)-A(3)*B(2)
LET C(2)=A(3)*B(1)-A(1)*B(3)
LET C(3)=A(1)*B(2)-A(2)*B(1)
END SUB
EXTERNAL SUB QUICKSORT(FI,LA,A(),INDEX())
LET X=A(INDEX((FI+LA)/2))
LET I=FI
LET J=LA
DO
DO WHILE A(INDEX(I))<X
LET I=I+1
LOOP
DO WHILE X<A(INDEX(J))
LET J=J-1
LOOP
IF I>=J THEN EXIT DO
SWAP INDEX(I),INDEX(J)
LET I=I+1
LET J=J-1
LOOP
IF FI<I-1 THEN CALL QUICKSORT(FI,I-1,A,INDEX)
IF J+1<LA THEN CALL QUICKSORT(J+1,LA,A,INDEX)
END SUB
|
|