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

Toukou/Recursive Figure の変更点

パンくずリスト


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

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

* 概要 [#g85ff51f]
再帰図形を描画します。
「再帰図形って知らないんですけど」→[[ググれ:https://www.google.co.jp/search?q=%E5%86%8D%E5%B8%B0%E5%9B%B3%E5%BD%A2%E3%81%A8%E3%81%AF&rls=com.microsoft:ja:IE-Address&ie=UTF-8&oe=UTF-8&sourceid=ie7&redir_esc=&ei=I7RKUbayBorRlAW5sYGgDA]]

参考:フラクタルCGコレクション((フラクタルCGコレクション サイエンス社 渕上季代絵=著 1987年発行 ちなみに絶版です。))

** いろいろ [#z29d8be3]
- 操作説明はプログラムを起動すればわかると思います。
-- ちなみにXは縦横に垂直な線、Yは最初の線と同じ長さの線を描きます。
- 読み込みラベル名を変更すればいろいろな図形が見れます。

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

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

// 以下の書式で、YouTube やニコニコ動画を貼り付けられます。
// #youtube(0HWX7kovgY8)
// #nicovideo(sm13684820)
有名なフラクタル図形、コッホ曲線のデモです。
#ref(KOHHO.PNG)
/////////////////////////////////
// QR コードがない場合は、この部分は削除してください

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

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

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

// QR コードを大きくしたい場合は、倍率指定ができます。コンマは必ず 2 つ指定してください。
// ブラウザによっては補完がかかってボケますが、それでも問題なく読み込み可能です。
// #ref(アップロードしたファイル名,,200%)

// 複数の QR コードを貼り付けるために表組みを用いる場合、&ref(); を使用します。
// (#ref() を表に埋め込んでしまうと、古い Internet Explorer でうまく表示されません)
#ref(qr000.png)
#ref(qr001.png)

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

* プログラムリスト [#m286ab7e]
#region(プログラムリスト)
#basic{{
' RECURSIVE FIGURE v2.0
'             for SmileBasic
'
'Programmed by ittan
'
'LIST @_DATA
'
CLEAR:ACLS
PNLTYPE"OFF"
GPAGE 0 :GCLS 0
?"READ DATA→ R
?"MAKE DATA→ M
INPUT P$
IF P$=="M" THEN GOTO@MAKE
LOCATE 0,CSRY+1:?"@":
LOCATE 0,CSRY-2
INPUT "LABEL";L$
RESTORE L$
READ BR,N,SX1,SY1,SX2,SY2
DIM X(BR+2),Y(BR+2)
DIM XA(256),YA(256),XB(256),YB(256)
DIM B(256)
CY=191
FOR I=2 TO BR
 READ X(I),Y(I)
NEXT I

@START
X(1)=0:Y(1)=0
X(BR+1)=1:Y(BR+1)=0
I=0
XA(I)=SX1:YA(I)=SY1
XB(I)=SX2:YB(I)=SY2
GPSET XA(I),CY-YA(I),5
OX=XA(I):OY=CY-YA(I)
@G1
I=I+1
IF I>N GOTO @LI
K=1
@G2
XX=XB(I-1)-XA(I-1)
YY=YB(I-1)-YA(I-1)
XA(I)=X(K)*XX-Y(K)*YY+XA(I-1)
YA(I)=X(K)*YY+Y(K)*XX+YA(I-1)
XB(I)=X(K+1)*XX-Y(K+1)*YY+XA(I-1)
YB(I)=X(K+1)*YY+Y(K+1)*XX+YA(I-1)
B(I)=B(I)+1
GOTO@G1
@LI
GLINE OX,OY,XB(N),CY-YB(N),5
'GPSET XB(N),CY-YB(N),5
OX=XB(N):OY=CY-YB(N)
@G3
B(I)=0
I=I-1
IF I<1 GOTO @E
IF B(I)>=BR GOTO @G3
K=B(I)+1
GOTO @G2
@E
CLS
PNLSTR 0,0,"LINE :"+STR$(BR)
PNLSTR 0,1,"LEVEL:"+STR$(N)
PNLSTR 0,2,"SX:"+STR$(SX1)
PNLSTR 0,3,"SY:"+STR$(SY1)
PNLSTR 0,4,"EX:"+STR$(SX2)
PNLSTR 0,5,"EX:"+STR$(SY2)
?"А:LEVEL SET
?"Б:EXIT
IF MK THEN ?"Ф:MAKE
VSYNC 0
@LP
VSYNC 1
BT=BTRIG()
IF BT==16 THEN INPUT N:GOTO@EX1
IF BT==32 THEN GOTO@EX2
IF BT==64 AND MK THEN GOTO@EX3
GOTO@LP
@EX1
GCLS:CLS
GOTO@START
@EX2
END
@EX3
CLS
GOTO @RT

@MAKE
DIM X(256),Y(256)
DIM XA(256),YA(256),XB(256),YB(256)
DIM B(256)
DIM MX(256),MY(256)
GPAGE 1
MX(0)=5:MY(0)=100
MX(1)=250:MY(1)=100
BR=1:TCHF=-1
@RT
BT=BUTTON()
BGMPLAY"@147C16G16
WAIT 1
CLS
?"А Create point
?"Б Delete point
?"Ф Draw Vertical Line--スイチョク
?"Х Draw Line of same length
?"                 --オナシ゛ナカ゛サ
?"START:GO!!
@LOOP
GOSUB @DRAW
OT=T
T=TCHST
BTR=NOT(BT) AND BUTTON()
BT=BUTTON()
TX=TCHX:TY=TCHY
IF !OT AND T THEN GOSUB @TCH
IF TCHF>=0 THEN GOSUB @TCHMOVE
IF BTR AND 1024 THEN @IN
VSYNC 1
GOTO@LOOP

@TCH
IF BT AND 16 GOTO @NEWPOINT
TCHF=-1
FOR I=0 TO BR
 PX=MX(I)
 PY=MY(I)
 IF ABS(PX-TX)<=5 AND ABS(PY-TY)<=5 THEN TCHF=I
 IF TCHF>=0 AND (BT AND 32)==32 THEN @DELPOINT
NEXT
RETURN

@TCHMOVE
IF T==0 THEN TCHF=-1:RETURN
MX(TCHF)=TX
MY(TCHF)=TY
IF BT AND 128 THEN GOSUB @TMV3
IF BT AND 64 THEN GOSUB @TMV2
IF TCHF==BR THEN MY(0)=MY(BR)
IF TCHF==0 THEN MY(BR)=MY(0)
RETURN

@TMV2
IF TCHF==0 THEN RETURN
IF (BT AND 128)==128 AND TCHF>=2 THEN @TMV23
IF ABS(MX(TCHF-1)-TX)<ABS(MY(TCHF-1)-TY) THEN @TMV22
MX(TCHF)=TX
MY(TCHF)=MY(TCHF-1)
RETURN
@TMV22
MY(TCHF)=TY
MX(TCHF)=MX(TCHF-1)
RETURN
@TMV23
IF ABS(MX(TCHF-1)-TX)<ABS(MY(TCHF-1)-TY) THEN @TMV24
MX(TCHF)=MX(TCHF-1)+L*SGN(TX-MX(TCHF-1))
MY(TCHF)=MY(TCHF-1)
RETURN
@TMV24
MY(TCHF)=MY(TCHF-1)+L*SGN(TY-MY(TCHF-1))
MX(TCHF)=MX(TCHF-1)

RETURN

@TMV3
IF TCHF<=1 THEN RETURN
L=SQR(POW(ABS(MX(1)-MX(0)),2)+POW(ABS(MY(1)-MY(0)),2))
CC=ATAN(TY-MY(TCHF-1),TX-MX(TCHF-1))
MX(TCHF)=MX(TCHF-1)+COS(CC)*L
MY(TCHF)=MY(TCHF-1)+SIN(CC)*L
RETURN

@NEWPOINT
BR=BR+1
MX(BR)=MX(BR-1)
MY(BR)=MY(BR-1)
MX(BR-1)=TX
MY(BR-1)=TY
RETURN

@DELPOINT
IF TCHF==0 OR TCHF==BR THEN RETURN
FOR J=I TO BR
MX(J)=MX(J+1)
MY(J)=MY(J+1)
NEXT
BR=BR-1
TCHF=-1
RETURN

@DRAW
GPAGE 1,2,1
GCLS
FOR I=0 TO BR-1
GLINE MX(I),MY(I),MX(I+1),MY(I+1),5
NEXT
FOR I=0 TO BR
GBOX MX(I)-3,MY(I)-3,MX(I)+3,MY(I)+3,2
NEXT
GPAGE 1,1,1
GCOPY 2,0,0,255,191,0,0,1

RETURN

@IN
CY=191
SX1=MX(0)
SY1=MY(0)
SX2=MX(BR)
SY2=MY(BR)
LX=SX2-SX1
FOR I=1 TO BR-1
X(I+1)=(MX(I)-SX1)/LX
Y(I+1)=-(MY(I)-SY1)/LX
NEXT
SY1=CY-SY1
SY2=CY-SY2
GPAGE 0:GCLS
BGMPLAY "@147G16E16<C16
N=1
MK=TRUE
GOTO@START

@_DATA
'シ゛ェネレ-タ サクセイノ ヒント
'Tips for creating a
'generator
'
'セントウノ テ゛-タ
'The first data
'СТТТТТТТТТТТТТТТТТТТТТТТТТТУ
'УDATA BR,N,SX1,SY1,SX2,SY2 У
'УBR:シ゛ェネレ-タノ センノ カス゛       У
'У  The total number of lineУ
'УN :セタ゛イ,ナント゛クリカエスカ        У
'У  Level                   У
'УSX1,SY1:シテンサ゛ヒョウ          У
'У       Coordinates of     У
'У       the Start          У
'УSX2,SY2:シュウテンサ゛ヒョウ        У
'У       Coordinates of     У
'У       the End            У
'У(Yシ゛クハ サ゛ヒョウハンテン)         У
'ТТТТТТТТТТТТТТТТТТТТТТТТТТТ
'シ゛ェネレ-タノ テ゛-タ
'DATA of generator
'
'SX1=0,SY1=0
'SX2=1,SY2=0

'0      0.5 0.75 1
'・-------・---・---・
'SX1            SX2
'
'DATA X1,Y1,X2,Y2....
'

'SAMPLE DATA
@S01
'   ййй   
'   з и   
'   з и   
'йййз иййй
'         
DATA 5,1
DATA 0,5,255,5
DATA 0.33,0
DATA 0.33,0.33
DATA 0.67,0.33
DATA 0.67,0

'SAMPLE02 
'    йй   
'    л л  
'жжл  жкж 
'   жжж   
@S02
DATA 11,3
DATA   0,  96,256,  96
DATA 0.167,0.0
DATA 0.333,-0.121
DATA 0.5  ,-0.16
DATA 0.667,-0.121
DATA 0.833,0
DATA 0.667,0.121
DATA 0.5  ,0.16
DATA 0.333,0.04
DATA 0.5  ,-0.04
DATA 0.667,0

@S03
'フラクタル---
DATA 2,13
DATA 50,40,200,40
DATA 0.3,0.4

@S04
'コッホ キョクセン
DATA 4,4
DATA 0,3,255,3
DATA 0.333,0
DATA 0.5  ,0.286
DATA 0.667,0

@S05
DATA 2,14
DATA 50,50,205,50
DATA 0.5,0.2
}}
#endregion
/////////////////////////////////
// コメントを募集したくないなら、ここから下は削除してください

* CHECKER FLAG (ひとことコメント) [#c177de67]
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は[[掲示板>Board]]へ)
- ''キービィ'' : QR作った方がいいですよ。 (&new{2013/03/21 (木) 17:41:02};)
- ''チクチク'' : ダウンロードしてみよ♪ (&new{2013/03/24 (日) 08:49:42};)
- ''Rfhrsewa'' : RNycMNki (&new{2014/03/10 (月) 19:48:30};)

#comment

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