|
> No.223[元記事へ]
! 山中さんの7セグ数字で、気が付いた。ありがとうございます。
! plot_lines の、vector_fontで、PLOT TEXT を、カバーできた。
! やや長文と、やせた字形は難点ながら、時計の数字も、鏡像になった。
!
!-------------------
LET N=2
LET NN=2^N
SET WINDOW -250/NN,250/NN,250/NN,-250/NN
SET TEXT COLOR 4
SET TEXT BACKGROUND "OPAQUE"
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 137/NN,-234/NN:"右クリックで停止"
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
CALL linefont(i/5, 60*COS(a), 60*SIN(a)) !数字
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(2) 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
!-------------------------------------
SUB linefont(i,x,y) ! plot text の代替
SELECT CASE i
CASE 1
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
CASE 2
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y;x-2.6,y;x-2.6,y+5;x+2.6,y+5 ! 2
CASE 3
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 3a
PLOT LINES:x-2.6,y;x+2.6,y ! 3b
CASE 4
PLOT LINES:x-2.6,y-5;x-2.6,y;x+2.6,y ! 4a
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 4b
CASE 5
PLOT LINES:x+2.6,y-5;x-2.6,y-5;x-2.6,y;x+2.6,y;x+2.6,y+5;x-2.6,y+5 ! 5
CASE 6
PLOT LINES:x+2.6,y-5;x-2.6,y-5;x-2.6,y+5;x+2.6,y+5;x+2.6,y;x-2.6,y ! 6
CASE 7
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y+5 ! 7
CASE 8
PLOT LINES:x-2.6,y;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5;x-2.6,y;x+2.6,y ! 8
CASE 9
PLOT LINES:x+2.6,y;x-2.6,y;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 9
CASE 10
LET x=x-7
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+11
PLOT LINES:x-2.6,y+5;x-2.6,y-5;x+2.6,y-5;x+2.6,y+5;x-2.6,y+5 ! 0
CASE 11
LET x=x-5
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+9
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
CASE 12
LET x=x-7
PLOT LINES:x+2.6,y-5;x+2.6,y+5 ! 1
LET x=x+11
PLOT LINES:x-2.6,y-5;x+2.6,y-5;x+2.6,y;x-2.6,y;x-2.6,y+5;x+2.6,y+5 ! 2
CASE ELSE
END SELECT
END SUB
END
|
|