だまし絵のしくみ

 投稿者:SECOND  投稿日:2012年 2月24日(金)19時38分17秒
  !だまし絵のしくみ
!------------------------------->
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
 

戻る