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

Toukou/ポリゴン時計 の変更点

パンくずリスト


#title(投稿プログラム : ポリゴンアナログ時計)
#contents
// ↑この2行は削除しないでください。
// ←このように「//」で始まる行はコメントです。ページ本文には反映されません。
//------------------------------------------------------------------------------
// ・投稿年月日は、このページを投稿しようとしている今日の日付を半角数字で入力してください。
//   この日付は、投稿プログラムを自動的に年月日順に並べる際に使用されます。
// ↓↓↓
2013年1月27日投稿
// ↑↑↑
//------------------------------------------------------------------------------
// ・投稿者名は、将来的に投稿プログラム一覧に表示するために使用します。
// ・「名無しさん」のままにしておくと、匿名の方からの投稿として扱われます。
// ↓↓↓
/ 投稿者 : 名無しさん
// ↑↑↑
//------------------------------------------------------------------------------
// ・適当にタグをつけることができます。半角のコンマ区切りで複数つけられます。
//   タグをつけると、同じタグが付いたページを検索することができます。
// ★次に該当するプログラムは、特定のタグを設定するようご協力お願いします。
//   これらを設定すると、将来的に投稿プログラム一覧に目立つマークが付くようになる予定です。
// ・短いプログラム → 「1行プログラム」「数行プログラム」「1画面プログラム」タグのいずれか1つ
// ・初代プチコンでも動作するプログラム → 「初代対応」タグ
// ・mkII 以降専用のプログラム → 「mkII専用」タグ
// ・QRコードを掲載している → 「QRコード」タグ
// ・該当するなら「ゲーム」「実用ツール」「音楽」タグのいずれか
// ↓↓↓
/ &tag(投稿プログラム,実用ツール,鑑賞プログラム,QRコード);
// ↑↑↑

//------------------------------------------------------------------------------
// ここに概要とか書きます。
// ・** や *** で始まる行は子見出しとなります。* の数で深さが決まります。
// ・[#英数字] はページ内リンクに使用されるアンカーですが、
//   書かなかったり、消したりしてもかまいません。ない場合はランダムな文字列が自動付与されます。

* 概要 [#Summary]
針をポリゴンで描画したアナログ時計です。

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

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

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

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

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

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

/////////////////////////////////

* スクリーンショット・動画 [#ScreenShots]
// 動作しているところを撮影した写真や動画があれば貼り付けてください。

// ページを作成すると、画像の添付ができるようになります。(作成する前はできません)
// 作成後のページの右上、ウィキメニューにある「添付」から画像をアップロードできます。
// (添付ファイルはページごとに別個に管理されています。必ず作成後のページに添付してください)
// 画像をアップロードしたら、以下の書式でページ内に貼り付けられます。
// #ref(添付ファイル名)

// 以下の書式で、YouTube やニコニコ動画を貼り付けられます。
// #youtube(0HWX7kovgY8)
// #nicovideo(sm13684820)

/////////////////////////////////
// QR コードがない場合は、この部分は削除してください

* QR コード [#QR]
プチコンmkII 向けの QR コードです。

// 【重要】旧プチコンから mkII に転送したプログラムは、mkII で保存しなおしてから
// QR コード化すると、枚数が半分ぐらいに減ります。ぜひお試し下さい。
// 【重要】添付できるのは画像ファイルのみです。zip ファイルは解凍してください。

// ページを作成すると、QR コードの添付ができるようになります。(作成する前はできません)
// 作成後のページの右上、ウィキメニューにある「添付」から画像をアップロードできます。
// (添付ファイルはページごとに別個に管理されています。必ず作成後のページに添付してください)
// QR コードをアップロードしたら、以下の書式でページ内に貼り付けられます。
// #ref(アップロードしたファイル名)
#ref(POLYCLK.png)
// QR コードを大きくしたい場合は、倍率指定ができます。コンマは必ず 2 つ指定してください。
// ブラウザによっては補完がかかってボケますが、それでも問題なく読み込み可能です。
// #ref(アップロードしたファイル名,,200%)

// 複数の QR コードを貼り付けるために表組みを用いる場合、&ref(); を使用します。
// (#ref() を表に埋め込んでしまうと、古い Internet Explorer でうまく表示されません)
// |>|>|~PRG:FILENAME|
// |~1/3|~2/3|~3/3|
// |&ref(qr0.png,,200%);|&ref(qr1.png,,200%);|&ref(qr2.png,,200%);|

/////////////////////////////////

* プログラムリスト [#List]
#basic{{
' ポリゴン ノ アナログドケイ
'緒・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
}}

/////////////////////////////////
// コメントを募集したくないなら、ここから下は削除してください

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

#comment

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