時計、時計、時計

 投稿者:SECOND  投稿日:2008年12月27日(土)01時50分5秒
  !1つ覚えに過ぎるか?取りあえずミラーの中に入れてみた。plot text を避けて、
!plot label を使用したので、文字への効果は、ありません。

! 時計、時計、時計
!-------------------
LET N=2
LET NN=2^N
SET TEXT font "Century",11
SET TEXT JUSTIFY "center","half"
SET TEXT BACKGROUND "OPAQUE"
SET WINDOW -250/NN,250/NN,250/NN,-250/NN

LET φ=0
LET stp=-PI/180*6
DO
   LET t=INT(TIME)
   IF t0<>t THEN
      LET t0=t
      IF 2*PI<=ABS(φ) THEN LET stp=-stp
      LET φ=REMAINDER(φ, 2*PI) +stp
      !-----
      SET DRAW mode hidden
      CLEAR
      DRAW D4(N) WITH SHIFT(-300/2,-300/2/SQR(3))*ROTATE(φ*(-1)^N)*SCALE(1,(-1)^N)
      DRAW center WITH SHIFT(-300/2/NN,-300/2/NN/SQR(3))*ROTATE(φ)
      PLOT TEXT,AT 180/NN,-240/NN:"Right Click to Stop"
      SET DRAW mode explicit
   ELSE
      WAIT DELAY 0.05 ! 省電力効果
   END IF
   MOUSE POLL mx,my,mlb,mrb
LOOP UNTIL mrb>=1 ! 右クリックで停止

PICTURE center
   SET LINE COLOR 2
   SET LINE width 2
   PLOT LINES:0,0;300/NN,0;300/2/NN,300/2/NN*SQR(3);0,0
   SET LINE width 1
   SET LINE COLOR 1
END PICTURE

!------
PICTURE D4(k)
   IF 0< k THEN
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(300/4,SQR(3)*300/4) ! 内側の上
      DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(300/4,SQR(3)*300/4) ! 内側の中
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(300/4,SQR(3)*300/4) !内側の左
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(300,0) ! 内側の右
   ELSE
      DRAW 時計図 WITH ROTATE(-φ)*SHIFT(300/2,300/2/SQR(3))
      PLOT LINES:0,0;300,0;300/2,SQR(3)*300/2;0,0 ! 外側の基準三角形(直接の描画は無し。)
   END IF
END PICTURE

!------
PICTURE 時計図
   SET AREA COLOR 1
   FOR i=1 TO 60
      LET a=PI/30*(i-15)
      IF MOD(i,5)=0 THEN
         PLOT label,AT 60*COS(a)+1, 60*SIN(a) :STR$(i/5) !数字
         DRAW disk WITH SCALE(1)*SHIFT(72*COS(a),72*SIN(a)) !5分目盛り
      ELSE
         DRAW disk WITH SCALE(.5)*SHIFT(72*COS(a),72*SIN(a)) !1分目盛り
      END IF
   NEXT i
   !--- 00:00 からt秒 の針回転 Gear
   DRAW hand(1) WITH SCALE(2.5, 0.75)*ROTATE(t*PI/21600) ! 時針
   DRAW hand(1) WITH ROTATE(t*PI/1800) ! 分針
   DRAW hand(1) WITH SCALE(0, 1.1)*ROTATE(t*PI/30) ! 秒針
   !--- 中心の飾り
   DRAW disk WITH SHIFT(0,0)*SCALE(4)
END PICTURE

PICTURE hand(c) ! 3針共用
   SET AREA COLOR c
   PLOT AREA: -1,15; 1,15; 1,-60; -1,-60
END PICTURE

END
 

疑問

 投稿者:GAIメール  投稿日:2008年12月27日(土)13時38分59秒
  > No.205[元記事へ]

SECONDさんへのお返事です。

万華鏡に万華鏡を入れ込むことはできるのでしょうか?
中に水や時計が入れられるなら、中に見ている万華鏡の映像を入れてみて見たい。
 

Re: 疑問

 投稿者:SECOND  投稿日:2008年12月27日(土)14時18分26秒
  > No.206[元記事へ]

GAIさんへのお返事です。

> 万華鏡に万華鏡を入れ込むことはできるのでしょうか?
> 中に水や時計が入れられるなら、中に見ている万華鏡の映像を入れてみて見たい。

実は、そのご返事をする前に、
以前に、投稿したものですが、下のプログラムを走らせて見て下さい。

!-----------------------------------------------------
!シルピンスキーのガスケットと並べて動かしてみる。

OPTION ARITHMETIC NATIVE
DIM px(11),py(11)

MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.40
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11, 0.11

!----------
FOR N=0 TO 4
   FOR s=9 TO 1 STEP -1
      SET DRAW mode hidden
      CLEAR
      SET WINDOW -0.4,1.6, -1.1,0.9
      PLOT TEXT,AT 0.6,0.8:"ミラー縮小4分岐"
      PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
      DRAW D4(N)
      SET WINDOW -1.0,1.0, -0.05,1.95
      PLOT TEXT,AT 0.6,0.8:"中を抜いたもの"
      PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
      DRAW D42(N)
      SET WINDOW 0.0,4.0, -0.1,3.9
      PLOT TEXT,AT 0.1,1.8:"シルピンスキーのガスケット"
      PLOT TEXT,AT 1.2,1.6, USING "N= %%":N
      DRAW D3(N)
      SET DRAW mode explicit
      WAIT DELAY 0.2
   NEXT s
NEXT N

!------ ミラー縮小4分岐
PICTURE D4(k)
   IF 0<k THEN
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
      DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
      DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
   ELSE
      DRAW Set01
   END IF
END PICTURE

!------ ミラー縮小4分岐(中)を外すと、シルピンスキーのガスケットもどきになる。
PICTURE D42(k)
   IF 0<k THEN
      DRAW D42(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
      ! これを外す DRAW D42(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
      DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
      DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
   ELSE
      DRAW Set01
   END IF
END PICTURE

!------ シルピンスキーのガスケット
PICTURE D3(k)
   IF 0<k THEN
   !---リンク・BASICで描く自己相似図形から拝借
      DRAW D3(k-1) WITH SCALE(1/2)
      DRAW D3(k-1) WITH SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0)
      DRAW D3(k-1) WITH SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3))
   ELSE
      DRAW Set01
   END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
   PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
   SET AREA COLOR 2
   DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾り1
   SET AREA COLOR 3
   DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾り2
   SET AREA COLOR 4
   DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾り3
END PICTURE

END
 

戻る