PRINT PRINT " 2進数の論理演算 を利用して、" PRINT " 色成分をマスクしたりセットしたりします。" PRINT SET WINDOW -1,1,-1,1 SET COLOR mode "NATIVE" INPUT PROMPT "RGB? ":W$ PRINT LET MR$=W$(1:2) LET MG$=W$(3:4) LET MB$=W$(5:6) LET RR=TO1610(MR$) LET GG=TO1610(MG$) LET BB=TO1610(MB$) LET R$=TO162$(MR$) LET G$=TO162$(MG$) LET B$=TO162$(MB$) LET LR=LEN(R$) LET LG=LEN(G$) LET LB=LEN(B$) FOR i=1 TO 8-LR LET R$="0"&R$ NEXT i FOR i=1 TO 8-LG LET G$="0"&G$ NEXT i FOR i=1 TO 8-LB LET B$="0"&B$ NEXT i CALL ORBIT(R$,"11111111",RS$) CALL ORBIT(G$,"11111111",GS$) CALL ORBIT(B$,"11111111",BS$) CALL ANDBIT(R$,"00000000",RM$) CALL ANDBIT(G$,"00000000",GM$) CALL ANDBIT(B$,"00000000",BM$) LET RRS=TO10(RS$) LET GGS=TO10(GS$) LET BBS=TO10(BS$) LET RRM=TO10(RM$) LET GGM=TO10(GM$) LET BBM=TO10(BM$) DIM x1(4),y1(4) FOR i=1 TO 4 LET x1(i)=COS(2*PI*i/4) LET y1(i)=SIN(2*PI*i/4) NEXT i SET AREA COLOR colorindex(RR/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 3 PRINT "赤色成分を全開にしました。" SET AREA COLOR colorindex(RRS/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "赤色成分を消滅させました。" SET AREA COLOR colorindex(RRM/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "元の色に戻しました。" SET AREA COLOR colorindex(RR/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "緑色成分を全開にしました。" SET AREA COLOR colorindex(RR/255,GGS/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "緑色成分を消滅させました。" SET AREA COLOR colorindex(RR/255,GGM/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "元の色に戻しました。" SET AREA COLOR colorindex(RR/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "青色成分を全開にしました。" SET AREA COLOR colorindex(RR/255,GG/255,BBS/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "青色成分を消滅させました。" SET AREA COLOR colorindex(RR/255,GG/255,BBM/255) MAT PLOT AREA: x1,y1 WAIT DELAY 4 PRINT "元の色に戻しました。" SET AREA COLOR colorindex(RR/255,GG/255,BB/255) MAT PLOT AREA: x1,y1 PRINT END EXTERNAL FUNCTION TO162$(S$) !16進数→2進数 DIM MJ$(20) DIM SU(20) DIM bin(20) LET L=LEN(S$) FOR N=1 TO L LET MJ$(N)=S$(N:N) !一文字ずつ取り出す IF MJ$(N)="A" THEN LET MJ$(N)="10" ELSEIF MJ$(N)="B" THEN LET MJ$(N)="11" ELSEIF MJ$(N)="C" THEN LET MJ$(N)="12" ELSEIF MJ$(N)="D" THEN LET MJ$(N)="13" ELSEIF MJ$(N)="E" THEN LET MJ$(N)="14" ELSEIF MJ$(N)="F" THEN LET MJ$(N)="15" END IF NEXT N FOR N=1 TO L LET SU(N)=VAL(MJ$(N)) !文字列を数値に変換する NEXT N LET d=0 FOR N=1 TO L LET d=d+SU(N)*16^(L-N) NEXT N LET p=1 DO WHILE 2<=d LET bin(p) = MOD(d,2) LET d = INT(d/2) LET p=p+1 LOOP LET bin(p) = d LET Q$="" FOR i=p TO 1 STEP -1 LET y=bin(i) LET Q$=Q$&mid$("01",y+1,1) NEXT i LET TO162$=Q$ END FUNCTION EXTERNAL FUNCTION TO10(S$) !2進数→10進数 DIM MJ$(20) DIM SU(20) LET L=LEN(S$) FOR N=1 TO L LET MJ$(N)=S$(N:N) !一文字ずつ取り出す NEXT N FOR N=1 TO L LET SU(N)=VAL(MJ$(N)) !文字列を数値に変換する NEXT N LET K=0 FOR N=1 TO L LET k=k+SU(N)*2^(L-N) NEXT N LET TO10=k END FUNCTION EXTERNAL FUNCTION TO2$(d) !10進数→2進数 DIM bin(20) LET p=1 DO WHILE 2<=d LET bin(p) = MOD(d,2) LET d = INT(d/2) LET p=p+1 LOOP LET bin(p) = d LET Q$="" FOR i=p TO 1 STEP -1 LET y=bin(i) LET Q$=Q$&mid$("01",y+1,1) NEXT i LET TO2$=Q$ END FUNCTION EXTERNAL FUNCTION TO1610(S$) !16進数→10進数 DIM MJ$(2) DIM SU(2) FOR N=1 TO 2 LET MJ$(N)=S$(N:N) NEXT N FOR N=1 TO 2 IF MJ$(N)="A" OR MJ$(N)="a" THEN LET MJ$(N)="10" ELSEIF MJ$(N)="B" OR MJ$(N)="b" THEN LET MJ$(N)="11" ELSEIF MJ$(N)="C" OR MJ$(N)="c" THEN LET MJ$(N)="12" ELSEIF MJ$(N)="D" OR MJ$(N)="d" THEN LET MJ$(N)="13" ELSEIF MJ$(N)="E" OR MJ$(N)="e" THEN LET MJ$(N)="14" ELSEIF MJ$(N)="F" OR MJ$(N)="f" THEN LET MJ$(N)="15" END IF NEXT N FOR N=1 TO 2 LET SU(N)=VAL(MJ$(N)) NEXT N LET k=0 FOR N=1 TO 2 LET k=k+SU(N)*16^(2-N) NEXT N LET TO1610=k END FUNCTION EXTERNAL SUB ANDBIT(x$,y$,z$) LET XX=TO10(x$) LET YY=TO10(y$) LET ZZ=bitAND(XX,YY) !2つの10進数を2進数に直してからAND論理演算してそれを10進数に変える LET z$=TO2$(ZZ) END SUB EXTERNAL SUB ORBIT(x$,y$,z$) LET XX=TO10(x$) LET YY=TO10(y$) LET ZZ=bitOR(XX,YY) LET z$=TO2$(ZZ) END SUB