Pair Mirrors in a Midnight - 真夜中の合わせ鏡(入れ子構造と条件判断)
(上の画像、左側に見えているのが本家トップページ)
// 前と同じで、やるべきことは二つの関数、setupとdrawを用意すること
// あとはKAMEコマンドを呼ぶだけ
// あとはKAMEコマンドを呼ぶだけ
void setup(){ //いっとう最初に一回だけP5から呼び出される
size(400,300); //窓のサイズは400×300
}
void draw() { //普通は一秒間に30回呼び出される
void awase_kagami(float len) { //一辺の長さがlenの合わせ鏡を描くには
}
size(400,300); //窓のサイズは400×300
}
void draw() { //普通は一秒間に30回呼び出される
kami(0); //新しい黒い紙
iro(255); //白いペン
saisho(100, 50); //最初は左上隅から右に100、下に50行った点から(下向き)
awase_kagami(200); //一辺の長さが200の合わせ鏡を描く
}iro(255); //白いペン
saisho(100, 50); //最初は左上隅から右に100、下に50行った点から(下向き)
awase_kagami(200); //一辺の長さが200の合わせ鏡を描く
void awase_kagami(float len) { //一辺の長さがlenの合わせ鏡を描くには
akarusa((len-10)/200.*255); //長さlenに応じた明るさのペンで
mae(len);hidari(90); //
mae(len);hidari(90); //
mae(len);hidari(90); //
mae(len);hidari(90); //一辺の長さがlenの正方形を描く
if (len>10) { //もし、辺の長さlenが10より大きければ(まだ描けるので)
} //条件(辺の長さについて)判断のおわりmae(len);hidari(90); //
mae(len);hidari(90); //
mae(len);hidari(90); //
mae(len);hidari(90); //一辺の長さがlenの正方形を描く
if (len>10) { //もし、辺の長さlenが10より大きければ(まだ描けるので)
hidari(45); //正方形の中心方向に向いて
janpu(len*(mouseX+mouseY)/700./10.); //辺の長さlenの【ある】割合だけジャンプして
migi(45-(mouseX-mouseY)/200.); //さっきの向き(下向き)に(マウス位置で若干ぶれて)戻って
awase_kagami(len*0.92); //一辺の長さがlenの92%の合わせ鏡を描く
janpu(len*(mouseX+mouseY)/700./10.); //辺の長さlenの【ある】割合だけジャンプして
migi(45-(mouseX-mouseY)/200.); //さっきの向き(下向き)に(マウス位置で若干ぶれて)戻って
awase_kagami(len*0.92); //一辺の長さがlenの92%の合わせ鏡を描く
}
ここまでを【PairMirror】にコピペし、追加分のKAMEのスクリプトを前記事を参考に【KAME】にコピペすれば
とりあえず真夜中の合わせ鏡を見れる。
入れ子の構造
【真夜中の合わせ鏡】は、
その中に(その中に(..(その中に(【ちょっと小さな四角】)が描かれた四角..)が描かれた四角)が描かれた四角
なんだけど、言い方を変えると、
その中にちょっと小さな【合わせ鏡】が描かれた四角
でもある。このような形で表すことの出来るモノ、絵、構造、概念、モデル、...を【入れ子構造を持つXX】と呼ぶことがある。
とりあえず真夜中の合わせ鏡を見れる。
入れ子の構造
【真夜中の合わせ鏡】は、
その中に(その中に(..(その中に(【ちょっと小さな四角】)が描かれた四角..)が描かれた四角)が描かれた四角
なんだけど、言い方を変えると、
その中にちょっと小さな【合わせ鏡】が描かれた四角
でもある。このような形で表すことの出来るモノ、絵、構造、概念、モデル、...を【入れ子構造を持つXX】と呼ぶことがある。
ただ、【入れ子構造】は【無限】が本質なので、ほんとに【素直】にスクリプトを書いちゃうと
あなたのPCが【逝ったきり】になってしまう。(いつかはメモリを使いきり、異常終了になる)
なので、どっかで止めてやらなければダメ。
あなたのPCが【逝ったきり】になってしまう。(いつかはメモリを使いきり、異常終了になる)
なので、どっかで止めてやらなければダメ。
例題も【見えない四角】になる前に、逝くのをやめさせている。
条件分岐
条件分岐は、
if(【真偽が決まる条件記述】){
のように記述する。
上の例では、
【真偽が決まる条件記述】は、len>10。
見ての通り、「辺の長さlenの値が10より大きいかどうか」なので、真偽が決まる条件記述になっている。
(一辺10の四角もみえるけど、これ以上描くと目が痛くなるので、ここらあたりがが順当)
これ以外に、xxx==yyy、xxx>=zzz、xxx!=yyy、や、それらのOR(論理和) xxx==yyy || xxx>=zzz
AND(論理積)xxx==yyy && xxx>=zzz、NOT(否定)!(xxx==yyy && xxx>=zzz)なんかの
組み合わせも、真偽が決まる条件記述。
【条件が真だったときにしたいこと】は、hidari(45)以下、ちょっと小さな【合わせ鏡】を描くこと
{ と } の間に、ちゃんと動くかどうかは別として好きなだけスクリプトを書ける。
【そうではないときにしたいこと】は、この例では無い。
【条件が真だったときにしたいこと】のあとに【else {】を続けると、【そうではないときにしたいこと】を記述できる。
【条件が真だったときにしたいこと】と同様、else { と } の間に、ちゃんと動くかどうかは別として好きなだけスクリプトを書ける。
こんだけ
【入れ子構造】の例は結構多い。キーワード「フラクタル」でググってみれば、情報は大量に入手できる。
条件分岐は、
if(【真偽が決まる条件記述】){
【条件が真だったときにしたいこと】
} else {
【そうではないときにしたいこと】
}のように記述する。
上の例では、
【真偽が決まる条件記述】は、len>10。
見ての通り、「辺の長さlenの値が10より大きいかどうか」なので、真偽が決まる条件記述になっている。
(一辺10の四角もみえるけど、これ以上描くと目が痛くなるので、ここらあたりがが順当)
これ以外に、xxx==yyy、xxx>=zzz、xxx!=yyy、や、それらのOR(論理和) xxx==yyy || xxx>=zzz
AND(論理積)xxx==yyy && xxx>=zzz、NOT(否定)!(xxx==yyy && xxx>=zzz)なんかの
組み合わせも、真偽が決まる条件記述。
【条件が真だったときにしたいこと】は、hidari(45)以下、ちょっと小さな【合わせ鏡】を描くこと
{ と } の間に、ちゃんと動くかどうかは別として好きなだけスクリプトを書ける。
【そうではないときにしたいこと】は、この例では無い。
【条件が真だったときにしたいこと】のあとに【else {】を続けると、【そうではないときにしたいこと】を記述できる。
【条件が真だったときにしたいこと】と同様、else { と } の間に、ちゃんと動くかどうかは別として好きなだけスクリプトを書ける。
こんだけ
【入れ子構造】の例は結構多い。キーワード「フラクタル」でググってみれば、情報は大量に入手できる。
「Proce55ingで遊ぶ」の方にも書いているけど、再掲
*usagi(),kame()の二つを追加。ゆっくり描かせられるようになったけど、ちょっと癖あり
*「Proce55ingで遊ぶ」のほうで、習作披露予定
*usagi(),kame()の二つを追加。ゆっくり描かせられるようになったけど、ちょっと癖あり
*「Proce55ingで遊ぶ」のほうで、習作披露予定
KAME2Dコマンド解説
usagi() : ウサギモード(超高速描画=いままでのモード)
kame() : 最高速カメモード(カメとしては高速:kami()はsetup()で)
kame(speed): カメモードのスピード指定(1が劇遅モード;同上)
mae(steps) : (線を描きながら)前にsteps歩進む
janpu(steps) : (線を描かずに)前にsteps歩進む
hidari(degrees): degrees°左を向く
migi(degrees) : degrees°右を向く
koko() : いまの場所(と向き)を覚える(【忘れ】ない限りは覚えている)
sakki() : 最近覚えた場所(と向き)に戻ったあと、そのことを【忘れ】る
saisho(x,y,dir): 最初の場所と向きを決める。
mannaka() : ウィンドウの真ん中に移動する。
kesu() : 描いた絵を白色で消す。
kami() : 真っ白な新しい紙にかえる
kami(clr) : clr色の新しい紙にかえる
kami(r,g,b) : (r,g,b)色の新しい紙にかえる
iro(clr) : ペンの色をclrにする
iro(r,g,b) : ペンの色を(r,g,b)にする
iroai(h) : ペンの色合い(色相)をhにする。(0~255)
azayakasa(s) : ペンの鮮やかさ(彩度)をsにする。(0~255)
akarusa(b) : ペンの明るさ(明度)をbにする。(0~255)
futosa(width) : ペンの太さをwidthにする。(単位:ピクセル)
なお、日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
山本徹(thoru)さんがFunProce55ingを始められました。(わくわく)
例題集は習作集と区別するためにこちらに置いた。
次は、【何しよう。KAMEコマンドの内部解説か?(リクエストありません?>keyさん】
usagi() : ウサギモード(超高速描画=いままでのモード)
kame() : 最高速カメモード(カメとしては高速:kami()はsetup()で)
kame(speed): カメモードのスピード指定(1が劇遅モード;同上)
mae(steps) : (線を描きながら)前にsteps歩進む
janpu(steps) : (線を描かずに)前にsteps歩進む
hidari(degrees): degrees°左を向く
migi(degrees) : degrees°右を向く
koko() : いまの場所(と向き)を覚える(【忘れ】ない限りは覚えている)
sakki() : 最近覚えた場所(と向き)に戻ったあと、そのことを【忘れ】る
saisho(x,y,dir): 最初の場所と向きを決める。
mannaka() : ウィンドウの真ん中に移動する。
kesu() : 描いた絵を白色で消す。
kami() : 真っ白な新しい紙にかえる
kami(clr) : clr色の新しい紙にかえる
kami(r,g,b) : (r,g,b)色の新しい紙にかえる
iro(clr) : ペンの色をclrにする
iro(r,g,b) : ペンの色を(r,g,b)にする
iroai(h) : ペンの色合い(色相)をhにする。(0~255)
azayakasa(s) : ペンの鮮やかさ(彩度)をsにする。(0~255)
akarusa(b) : ペンの明るさ(明度)をbにする。(0~255)
futosa(width) : ペンの太さをwidthにする。(単位:ピクセル)
なお、日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
山本徹(thoru)さんがFunProce55ingを始められました。(わくわく)
例題集は習作集と区別するためにこちらに置いた。
次は、【何しよう。KAMEコマンドの内部解説か?(リクエストありません?>keyさん】