プチコンまとめWiki (初代/mkII)

投稿プログラム : ポリゴンアナログ時計

パンくずリスト

2013年1月27日投稿 / 投稿者 : 名無しさん / タグ : 投稿プログラム 実用ツール 鑑賞プログラム QRコード

概要

針をポリゴンで描画したアナログ時計です。

操作方法

実行すると、上画面に時計が表示されます。十字キーまたは、ボタン操作で終了します。

プログラムについて

DDAによる直線補間 でポリゴンが描けないか試した習作です。 商と余剰を分離するよりは、そのまま割り算した方が速いと判断した処理となっています。 ついでに、塗りつぶされた円の描画処理も入っています。

円の描画はリアルタイムに表示するには遅い(1ライン毎に整数平方根を算出する必要がある)ため、 ページフリップの直後に盤面を描画しておき、秒の切り替えを待って針を描画しています。

処理速度にはまだまだ余裕があるため、装飾の強化や、リアルタイム更新など、 追加・改造する要素はまだありそうです。

色は見易さ優先で かなり適当です。申し訳ない…

プチコンに対するあれこれ

  1. ポリゴンはともかく、塗りつぶされた円は標準命令に入れて欲しかったです。
  2. このプログラムでは使用していませんが、描画の演算が XOR しかないのがつらいです。
    1. 加減算・シフト効果 があれば、描画にも箔がつくとおもいます。
    2. 加えて、論理演算やキャリー機能もあれば、GPU演算へのアプローチにもなります。
  3. 編集モード中 L+← でソースコードが下画面に来たら、カーソル移動も楽になるかも…とも思いました。

スクリーンショット・動画

QR コード

プチコンmkII 向けの QR コードです。

POLYCLK.png

プログラムリスト

  1. ’ ホ゜リコ゛ン ノ アナロク゛ト゛ケイ
  2. ’緒・INIT 緒
  3. CLEAR:DIM SC(360),PWR(256)
  4. PNLTYPE ”PNL”:GPAGE 1,2,2:GCLS
  5. FOR I=0 TO 359:SC(I)=SIN(PI()*I/180)*80:NEXT
  6. FOR I=0 TO 255:PWR(I)=I*I:NEXT I
  7. ACLS’:GDRAWMD TRUE
  8. ’緒・BOARD SETTING 緒
  9. FOR L=0 TO 1
  10.   GPAGE 0,1−L,L:GCLS
  11.   CX=129:CY=97:CS=90:CC=254
  12.   GOSUB @FILCIRC
  13. NEXT
  14. GOSUB @DRWBOARD
  15. ’緒・MAIN LOOP 緒
  16. FOR L=0 TO 1
  17. ’緒・SET NEEDLE (DEG) 緒
  18. BF$=TIME$
  19. TS=VAL(RIGHT$(BF$,2))*6
  20. TM=VAL(MID$(BF$,3,2))*6+FLOOR(TS/60)
  21. TH=VAL(LEFT$(BF$,2))*30+FLOOR(TM/12)
  22. LOCATE 0,0:?BF$
  23. OL=FALSE ’・OUTLINE
  24. ’緒・HOUR 緒
  25. NA=TH:NB=140:NC=360−NB:ND=1.5
  26. GOSUB @SETNDL
  27. PC=4:GOSUB @POLY
  28. ’緒・MINUTE 緒
  29. NA=TM:NB=160:NC=360−NB:ND=1
  30. GOSUB @SETNDL
  31. PC=10:GOSUB @POLY
  32. ’緒・SECOND 緒
  33. NA=TS:NB=170:NC=360−NB:ND=1
  34. GOSUB @SETNDL
  35. PC=2:GOSUB @POLY
  36. ’緒・REFRESH 緒
  37. GPAGE 0,1−P,P:P=1−P
  38. GOSUB @DRWBOARD
  39. FOR I=0 TO 1:VSYNC 1
  40.   I=1−(BF$==TIME$)+BUTTON()
  41. NEXT:L=BUTTON():NEXT
  42. END
  43. ’緒・BOARD 緒
  44. @DRWBOARD
  45. CX=127:CY=95:CS=90:CC=250
  46. GOSUB @FILCIRC
  47. FOR I=1 TO 12
  48.   CX=SC((I*30)%360)+128
  49.   CY=96−SC((I*30+90)%360)
  50.   CS=4:CC=253
  51.   IF I%3==0 THEN GOSUB @FILCIRC:CC=250
  52.   CS=2:GOSUB @FILCIRC
  53. NEXT
  54. RETURN
  55. ’聹・SET NEEDLE 聹
  56. ’・SA:SIN ANGLE (PI/2)
  57. ’・NA:ANGLE ・NB,NC:BOLD
  58. ’・ND:DIVIDE LENGTH
  59. @SETNDL
  60. SA=90 ’360/4
  61. X0=0OR(128+SC((NA)%360)/ND)
  62. Y0=0OR(96−SC((NA+SA)%360)/ND)
  63. X1=0OR(128+SC((NA+NB)%360)/6)
  64. Y1=0OR(96−SC((NA+SA+NB)%360)/6)
  65. X2=0OR(128+SC((NA+NC)%360)/6)
  66. Y2=0OR(96−SC((NA+SA+NC)%360)/6)
  67. RETURN
  68. ’聹・DRAW POLYGON 聹
  69. @POLY
  70. ’SORT Y
  71. IF Y0>Y1 THEN SWAP X0,X1:SWAP Y0,Y1
  72. IF Y0>Y2 THEN SWAP X0,X2:SWAP Y0,Y2
  73. IF Y1>Y2 THEN SWAP X1,X2:SWAP Y1,Y2
  74. H1=Y1−Y0:V1=X1−X0
  75. H2=Y2−Y0:V2=X2−X0
  76. LX=X0*H1:RX=X0*H2
  77. IF H1==0 THEN GOTO @POLSKIP1
  78. ’緒・DRAW Y0 TO Y1 緒
  79. FOR DY=Y0 TO Y1−1
  80.   GFILL LX/H1,DY,RX/H2,DY,PC
  81.   LX=LX+V1:RX=RX+V2
  82. NEXT
  83. @POLSKIP1
  84. ’緒・VECTOR COLLECT 緒
  85. H1=Y2−Y1:V1=X2−X1
  86. LX=X1*H1
  87. ’緒・DRAW Y1 TO Y2 緒
  88. IF H1==0 THEN GOTO @POLSKIP2
  89. FOR DY=Y1 TO Y2
  90.   GFILL LX/H1,DY,RX/H2,DY,PC
  91.   LX=LX+V1:RX=RX+V2
  92. NEXT
  93. @POLSKIP2
  94. IF OL THEN GOSUB @POLYOL
  95. RETURN
  96. ’聹・OUTLINE 聹
  97. @POLYOL
  98. GLINE X0,Y0,X1,Y1,15
  99. GLINE X0,Y0,X2,Y2,15
  100. GLINE X1,Y1,X2,Y2,15
  101. RETURN
  102. ’聹・DRAW FILLED CIRCLE 聹
  103. @FILCIRC
  104. GFILL CX−CS,CY,CX+CS,CY,CC
  105. FOR CI=1 TO CS
  106.   CZ=POW(CS+.3,2)
  107.   Z=FLOOR(SQR(CZ−PWR(CI)))
  108.   GFILL CX−Z,CY−CI,CX+Z,CY−CI,CC
  109.   GFILL CX−Z,CY+CI,CX+Z,CY+CI,CC
  110. NEXT 
  111. RETURN

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : あああああQRほしいいいいい (2013/01/27 (日) 01:36:13)
  • 名無しさん : QR登録しましたドゾー (2013/01/27 (日) 01:40:33)
  • .EXE : すげーーーーーーー (2013/01/27 (日) 07:19:13)
  • 名無しさん : ポリゴン!?!?!? (2013/01/27 (日) 20:17:46)
  • 名無しさん : 「プチコンへの要望」のページがあるので、希望はそちらに書いておいてもらえますか? (2013/01/27 (日) 23:04:38)
  • 名無しさん : 要望、転記しました (2013/01/28 (月) 12:03:58)
  • Topaz : レイ・トレーシングの人ですか? (2013/02/09 (土) 12:44:43)
  • 名無しさん : ポリゴンて3dだよな? (2013/02/09 (土) 12:48:27)
  • アサツキ : ↑ もとは「多角形」という意味で、3D描画の要素として使われたのは後のことのようです。 参照:bit.ly/iYW0Fg (2013/02/09 (土) 14:35:32)
  • 名無しさん : す、すごい。まさに探してた時計だ (2013/03/29 (金) 02:06:36)
  • 道産子の初心者 : すごw (2013/03/29 (金) 09:15:08)
  • 小5 : どこが、ポリゴンww(笑) (2013/05/20 (月) 18:40:48)
  • 道産子 : 携帯のフルブラウザだとリストが文字化けww (2013/05/20 (月) 19:17:37)
  • 名無しさん : (作品に直接関係ない質問や雑談は掲示板へ) (2013/05/20 (月) 19:22:28)
  • 猫姫 : そういう意味のポリゴンですか!!??poli-gon。そういう意味なら、針はトリゴン?(そんな言葉あるの??) (2013/05/20 (月) 23:53:48)
  • キービィ : 道産子さんのOSもどきのアプリに使えそう。 (2013/05/21 (火) 11:07:28)
  • 名無しさん : 時計の針は二角形で描画するのが一番簡単 (2013/05/21 (火) 18:45:49)
  • サトシ : ポケモンGETだぜ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (2013/05/30 (木) 17:10:10)
  • F−ZERO : ↑は? この時計いいね!! (2013/05/30 (木) 17:11:27)
  • 箱野隋一 : サトシ荒らしww  すっ五ーーーイ (2013/05/30 (木) 17:17:09)
  • かず : 聹とか緒にバグってる! ブラウザ:Google Chrome (2013/07/18 (木) 15:25:38)
  • かず : OSもどきにつかいますね! (2013/07/18 (木) 15:27:28)
  • Shiftキー : ↑5アニメのポケモンたくさんの人が病院に運ばれて放送が一時中止になって大変な事になった話のポリゴンの事だろ? (2013/07/18 (木) 17:07:30)
  • cmk、 : ↑その事はそっとしておいておこう。 (2013/07/18 (木) 19:37:38)
  • 名無しさん : ポリゴンは悪くない。悪いのは製作費けちってあんなのやった人 (2013/07/18 (木) 20:04:55)
  • .EXE : (視聴者を)殺ったぜ!ピカチュウ!のことだろ?この話題やめた方がいい。 (2013/07/18 (木) 20:30:56)
  • 名無しさん : サトシ・・・ (2013/08/31 (土) 21:02:45)
  • win : 聹と緒 (2014/04/02 (水) 14:33:18)
  • 名無しさん : すごい! (2014/05/20 (火) 18:51:45)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.034 秒 | このページの最終更新 : 2014/05/20 (火) 18:51:45 (2035d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30