2013年1月27日投稿 / 投稿者 : 名無しさん / タグ : 投稿プログラム 実用ツール 鑑賞プログラム QRコード
針をポリゴンで描画したアナログ時計です。
実行すると、上画面に時計が表示されます。十字キーまたは、ボタン操作で終了します。
DDAによる直線補間 でポリゴンが描けないか試した習作です。 商と余剰を分離するよりは、そのまま割り算した方が速いと判断した処理となっています。 ついでに、塗りつぶされた円の描画処理も入っています。
円の描画はリアルタイムに表示するには遅い(1ライン毎に整数平方根を算出する必要がある)ため、 ページフリップの直後に盤面を描画しておき、秒の切り替えを待って針を描画しています。
処理速度にはまだまだ余裕があるため、装飾の強化や、リアルタイム更新など、 追加・改造する要素はまだありそうです。
色は見易さ優先で かなり適当です。申し訳ない…
プチコンmkII 向けの QR コードです。
- ’ ホ゜リコ゛ン ノ アナロク゛ト゛ケイ
- ’緒・INIT 緒
- CLEAR:DIM SC(360),PWR(256)
- PNLTYPE ”PNL”:GPAGE 1,2,2:GCLS
- FOR I=0 TO 359:SC(I)=SIN(PI()*I/180)*80:NEXT
- FOR I=0 TO 255:PWR(I)=I*I:NEXT I
- ACLS’:GDRAWMD TRUE
- ’緒・BOARD SETTING 緒
- FOR L=0 TO 1
- GPAGE 0,1−L,L:GCLS
- CX=129:CY=97:CS=90:CC=254
- GOSUB @FILCIRC
- NEXT
- GOSUB @DRWBOARD
- ’緒・MAIN LOOP 緒
- FOR L=0 TO 1
- ’緒・SET NEEDLE (DEG) 緒
- BF$=TIME$
- TS=VAL(RIGHT$(BF$,2))*6
- TM=VAL(MID$(BF$,3,2))*6+FLOOR(TS/60)
- TH=VAL(LEFT$(BF$,2))*30+FLOOR(TM/12)
- LOCATE 0,0:?BF$
- OL=FALSE ’・OUTLINE
- ’緒・HOUR 緒
- NA=TH:NB=140:NC=360−NB:ND=1.5
- GOSUB @SETNDL
- PC=4:GOSUB @POLY
- ’緒・MINUTE 緒
- NA=TM:NB=160:NC=360−NB:ND=1
- GOSUB @SETNDL
- PC=10:GOSUB @POLY
- ’緒・SECOND 緒
- NA=TS:NB=170:NC=360−NB:ND=1
- GOSUB @SETNDL
- PC=2:GOSUB @POLY
- ’緒・REFRESH 緒
- GPAGE 0,1−P,P:P=1−P
- GOSUB @DRWBOARD
- FOR I=0 TO 1:VSYNC 1
- I=1−(BF$==TIME$)+BUTTON()
- NEXT:L=BUTTON():NEXT
- END
- ’緒・BOARD 緒
- @DRWBOARD
- CX=127:CY=95:CS=90:CC=250
- GOSUB @FILCIRC
- FOR I=1 TO 12
- CX=SC((I*30)%360)+128
- CY=96−SC((I*30+90)%360)
- CS=4:CC=253
- IF I%3==0 THEN GOSUB @FILCIRC:CC=250
- CS=2:GOSUB @FILCIRC
- NEXT
- RETURN
- ’聹・SET NEEDLE 聹
- ’・SA:SIN ANGLE (PI/2)
- ’・NA:ANGLE ・NB,NC:BOLD
- ’・ND:DIVIDE LENGTH
- @SETNDL
- SA=90 ’360/4
- X0=0OR(128+SC((NA)%360)/ND)
- Y0=0OR(96−SC((NA+SA)%360)/ND)
- X1=0OR(128+SC((NA+NB)%360)/6)
- Y1=0OR(96−SC((NA+SA+NB)%360)/6)
- X2=0OR(128+SC((NA+NC)%360)/6)
- Y2=0OR(96−SC((NA+SA+NC)%360)/6)
- RETURN
- ’聹・DRAW POLYGON 聹
- @POLY
- ’SORT Y
- IF Y0>Y1 THEN SWAP X0,X1:SWAP Y0,Y1
- IF Y0>Y2 THEN SWAP X0,X2:SWAP Y0,Y2
- IF Y1>Y2 THEN SWAP X1,X2:SWAP Y1,Y2
- H1=Y1−Y0:V1=X1−X0
- H2=Y2−Y0:V2=X2−X0
- LX=X0*H1:RX=X0*H2
- IF H1==0 THEN GOTO @POLSKIP1
- ’緒・DRAW Y0 TO Y1 緒
- FOR DY=Y0 TO Y1−1
- GFILL LX/H1,DY,RX/H2,DY,PC
- LX=LX+V1:RX=RX+V2
- NEXT
- @POLSKIP1
- ’緒・VECTOR COLLECT 緒
- H1=Y2−Y1:V1=X2−X1
- LX=X1*H1
- ’緒・DRAW Y1 TO Y2 緒
- IF H1==0 THEN GOTO @POLSKIP2
- FOR DY=Y1 TO Y2
- GFILL LX/H1,DY,RX/H2,DY,PC
- LX=LX+V1:RX=RX+V2
- NEXT
- @POLSKIP2
- IF OL THEN GOSUB @POLYOL
- RETURN
- ’聹・OUTLINE 聹
- @POLYOL
- GLINE X0,Y0,X1,Y1,15
- GLINE X0,Y0,X2,Y2,15
- GLINE X1,Y1,X2,Y2,15
- RETURN
- ’聹・DRAW FILLED CIRCLE 聹
- @FILCIRC
- GFILL CX−CS,CY,CX+CS,CY,CC
- FOR CI=1 TO CS
- CZ=POW(CS+.3,2)
- Z=FLOOR(SQR(CZ−PWR(CI)))
- GFILL CX−Z,CY−CI,CX+Z,CY−CI,CC
- GFILL CX−Z,CY+CI,CX+Z,CY+CI,CC
- NEXT
- RETURN
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.115 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:20 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30