|
!だまし絵のしくみ
!------------------------------->
SET TEXT JUSTIFY "center","half"
SET WINDOW -1,13, -10,4
!---
DO
CALL type(3,2)
CALL type(4,2) !(周期分割のインターバル幅, インターバル回数)
CALL type(2,3)
CALL type(1,5)
LOOP
SUB type(C,n) !( C=周期分割のインターバル幅, n=インターバル回数)
CLEAR
DRAW grid
PLOT TEXT,AT 4.4, 3.3:"だまし絵のしくみ。 周期分割インターバル "& STR$(C)
PLOT TEXT,AT 4.4,-7.3:"左クリック:次へ進む。 右クリック:終了。"
LET L=1 !棒の長さ
LET P=n !C=1 の周期 P=n (棒の個数)
IF C=1 THEN LET n=1 ELSE LET P=C*n-1 !C=2~ の周期 P=C*n-1 (棒の個数)
!---
DRAW cheat(n, L, 0,n, 40,0)
DRAW cheat(n, L, n,P, 39,2)
DRAW cheat(n, -L, 0,P, 15,1)
!---
DRAW cheat(n, L, 0,n, 40,2) WITH SHIFT(P-n, -4)
DRAW cheat(n, L, n,P, 39,0) WITH SHIFT( -n, -4)
DRAW cheat(n, -L, 0,P, 15,1) WITH SHIFT( 0, -4)
DO
LET mlbak=mlb
WAIT DELAY .05
mouse poll x,y,mlb,mrb
IF 0< mrb THEN STOP
LOOP UNTIL mlbak< mlb
END SUB
PICTURE cheat(n, L, x1,x2, col,txt)
SET AREA COLOR col
PLOT AREA: x1,0; x2,0; x2,L*1.3; x1,L*1.3
SET LINE width 5
FOR i=0 TO P-1
LET x=MOD(i*n, P)+.5
IF x1< x AND x< x2 THEN
LET y=ABS(L)/(P-1)*i+(L-ABS(L))/2
PLOT LINES: x, y; x, 0
PLOT TEXT,AT x, L*1.5-.03: STR$(i+1)
END IF
NEXT i
SET LINE width 1
IF txt=>1 THEN PLOT TEXT,AT x2+1.3, L*1.5-.03: "← 位相番号"
IF txt=2 THEN PLOT TEXT,AT x2+2, L*.7-.03: "← 左右 絵の逆置き"
END PICTURE
END
|
|