時計のプログラミング

 投稿者:田村幸助  投稿日:2008年12月22日(月)11時09分20秒
  十進BASICで時計を作りたいのですが、
プログラムを教えていただけませんか?
時計はアナログ時計です。
 

Re: 時計のプログラミング

 投稿者:山中和義  投稿日:2008年12月22日(月)11時45分27秒
  > No.184[元記事へ]

田村幸助さんへのお返事です。

> 時計はアナログ時計です。

シンプルです。単位円上に文字盤を描いています。いろいろ改良してください。

秒について
他の手法(たとえば、TIME関数)で小数点以下(ミリ秒)を取得できますが、
正確な値は期待できませんので、秒針をなめらかに動かすことは難しいかと思います。

!アナログ時計

SET WINDOW -1.2,1.2,-1.2,1.2 !表示領域
SET TEXT JUSTIFY "center","half" !文字表示の書式

DO
   LET t$=TIME$ !時刻をhh:mm:ss形式で得る
   LET h=VAL(t$(1:2)) !数値へ
   LET m=VAL(t$(4:5))
   LET s=VAL(t$(7:8))

   SET DRAW mode hidden !ちらつみ防止(開始)
   CLEAR

   FOR i=1 TO 12 !文字盤
      LET th=PI/2-2*PI*i/12 !Y軸から時計まわり
      PLOT TEXT ,AT COS(th),SIN(th): STR$(i) !円周上
   NEXT i

   LET th=PI/2-2*PI*(h + m/60)/12 !時針
   PLOT LINES: 0,0; 0.6*COS(th),0.6*SIN(th)

   LET th=PI/2-2*PI*m/60 !分針
   PLOT LINES: 0,0; 0.9*COS(th),0.9*SIN(th)

   LET th=PI/2-2*PI*s/60 !秒針
   PLOT LINES: 0,0; 0.8*COS(th),0.8*SIN(th)

   SET DRAW mode explicit !ちらつき防止(終了)
LOOP

END
 

Re: 時計のプログラミング

 投稿者:荒田浩二  投稿日:2008年12月22日(月)18時34分45秒
  > No.185[元記事へ]

山中和義さんへのお返事です。


上書きせていただきました。
調べたら1分間に約8200回の描画をしていたので、秒の更新があったときに描画するようにしました。
文字盤部分もLOOPから出して描画時間を節約。
長針・短針を絵定義にし、PICTURE hand を書き換えることにより針のデザイン変更を容易にできるようにしました。


!アナログ時計(改)

SET WINDOW -1.2,1.2,-1.2,1.2 !表示領域
SET TEXT JUSTIFY "center","half" !文字表示の書式
SET TEXT HEIGHT 1.2/10
SET AREA COLOR 5 ! 水色
SET POINT STYLE 4 ! 。
DRAW disk WITH SCALE(1.1)
FOR i=1 TO 12 !文字盤
   LET th=PI/2-2*PI*i/12 !Y軸から時計まわり
   PLOT TEXT ,AT COS(th),SIN(th): STR$(i) !円周上
   FOR j=1 TO 4
      LET th=PI/2-2*PI*(5*i+j)/60
      PLOT POINTS : 0.94*COS(th),0.94*SIN(th)
   NEXT j
NEXT i

SET LINE COLOR "RED"
LET t0=INT(TIME)
DRAW clock(t0)

DO
   IF TIME-t0>=1 THEN ! 秒の更新で描画
      LET t0=INT(TIME)
      DRAW clock(t0)
   END IF
LOOP

PICTURE clock(t0)
   LET h=INT(t0/3600) !数値へ
   LET m=INT((t0-3600*h)/60)
   LET s=MOD(t0,60)

   SET DRAW mode hidden !ちらつき防止(開始)
   SET AREA COLOR 0 ! 白
   DRAW disk WITH SCALE(0.9) !針描画部分のみクリア

   LET th=PI/2-2*PI*(h + m/60)/12 !時針
   DRAW hand(3) WITH SCALE(0.6,1)*ROTATE(th)

   LET th=PI/2-2*PI*m/60 !分針
   DRAW hand(2) WITH SCALE(0.86,1)*ROTATE(th)

   LET th=PI/2-2*PI*s/60 !秒針
   PLOT LINES: 0,0; 0.8*COS(th),0.8*SIN(th)

   SET DRAW mode explicit !ちらつき防止(終了)
END PICTURE

PICTURE hand(col) !針描画
   SET AREA COLOR col
   PLOT AREA : -0.05,-0.03;1,-0.03;1,0.03;-0.05,0.03
END PICTURE

END
 

Re: 時計のプログラミング

 投稿者:田村幸助  投稿日:2008年12月23日(火)19時50分37秒
  > No.186[元記事へ]

山中さん荒田さん
ありがとうございました。
 

戻る