プログラミング入門

再帰プログラムでシェルピンスキーのギャスケットを描く

今回は「再帰」について考えてみたいと思います。再帰プログラムを使って、フラクタル図形の一つである「シェルピンスキーのギャスケット」をScratchで描いてみます。
「再帰」「フラクタル」については以下の記事で解説していますので、もしよろしければそちらを参考にしてみてください。
 
<再帰プログラムでコッホ曲線を描く>

1. シェルピンスキーのギャスケットって?

1-1. シェルピンスキーのギャスケットとは?

シェルピンスキーのギャスケットとはこういう図形です。ポーランドの数学者、シェスピンスキーさんにちなんで名付けられたそうです。
 
▼Wikipediaより(この画像がパブリックドメインであることを確認した上で使用しています。)

この図形の描き方を順を追って解説します。画像はWikipediaよりお借りしています。(この画像がパブリックドメインであることを確認した上で使用しています。)
最初に三角形があります。

この三角形の辺の真ん中の点を結んだ、中央にできる三角形を切り取ります。

残った黒い部分も同じように、三角形の真ん中の点を結んだ中央にできる三角形を切り取ります。

さらにこの操作を繰り返すと・・・

このようにどんどん小さな穴が開いていきます。これをずーっと極限まで繰り返したものがシェルピンスキーのギャスケットです。
 

1-2. ギャスケットって何?

ギャスケットは英語でGasket(ガスケット)のことです。ガスケットについてWikipediaを調べてみると、どうやら配管などに使われるパッキンのことだそうです。
▼ガスケット-Wikipedia
ガスケット
 
 
Wikipediaのパッキンの写真をみると、円形の素材に穴が複数開けられています。つまり、素材をくり抜いたガスケットに似ているので、この図形をガスケット=ギャスケットというみたいですね。
なおシェルピンスキーのギャスケットに似た図形としてアポロニウスのギャスケットというものがあります。
 

2. シェルピンスキーのギャスケットをScratchで描こう

2-1. 再帰を使わないプログラムを作ってみる

再帰プログラムを考える前に、ペンを使ってシェルピンスキーのギャスケット最初の図形を無理やり描いてみましょう。ギャスケットの図形は「色をつけた部分をくりぬいていく」ものですが、Scratchではくり抜くという表現が難しいため、三角形の外側の線だけを書いてみたいと思います。
 
向きがわかりやすいように三角形のスプライトを準備します。スプライトの向きが90度の時に、三角形が右側を向くように描きましょう。

そして、画面をリセットするプログラムを作っておきます。このプログラムは、cキーを押して実行します。ペンで描いた線を消し、スプライトの位置を元の場所に戻してくれます。

 
最初の三角形を描くプログラムを作ります。これは簡単ですね。

 
0キーを押してこのプログラムを実行すると、最初の三角形が描けました。これを再帰回数0回とします。

 
次に、再帰回数1回の曲線を描くプログラムを作ってみます。できるだけ、繰り返しを使うようにすると次のようなプログラムになります。

 
1キーを押して再帰回数1回のプログラムを実行してみましょう。

再帰回数1回のギャスケットが描けました。
さらに、再帰回数2回のプログラムを作ってみましょう。

 
2キーを押して再帰回数2回のプログラムを実行してみましょう。はい。さらに内部に小さな三角形が描かれました。

 

2-2. 再帰プログラムで描いてみる

先ほどの再帰回数0回〜2回のプログラムを並べて比較してみましょう。

 
するとこんなことがわかりました。

 ・再帰回数1のプログラムには、再帰回数0のプログラムが含まれている
 ・再帰回数1の動く歩数は、再帰回数0のプログラムの歩数の2分の1
 ・再帰回数2のプログラムには、再帰回数1と再帰回数0のプログラムが含まれている
 ・再帰回数2の動く歩数は、再帰回数1のプログラムの歩数の2分の1
このように規則性を考えると、シェルピンスキーのギャスケットは次のように定義できます。

 

数字キーで再帰回数が設定できるようにしたいと思います。下の図のように、0から9までの再帰回数でシェルピンスキーのギャスケットが描けるようにしました。

 

再帰回数が増えてくると、プログラムが遅くなってくるのでターボモードで実行しましょう。

 
7キーを押すと再帰回数7回のシェルピンスキーのギャスケットが描けました!

 
完成したプログラムはこちらです。1、2、3、4、5・・・とキーを押していくとどんどん細かくなっていきます。7以上は細かすぎて、見た目はあまり変化がありません。

 

3. まとめ

今回は、再帰プログラムを作ってフラクタル図形「シェルピンスキーのギャスケット」を作りました。
いきなり再帰プログラムを作るのは難しいので、まずは再帰を使わずに作ってみましょう。その中からどんな規則が見えるのか考えてみるといいですね。

また今回はペンの色を変えずに作ってみましたが、ぺんの色を変えてみたり三角形の大きさを変えてみたり・・・などこの作品をリミックスしてみても面白いと思います。再帰プログラムでいろいろ遊んでみてくださいね。では!

伴野悠佳 / YUKA TOMONO
この記事の著者伴野悠佳 / YUKA TOMONO
教育ヲタクの1児の母。自称ニコニコキッズクリエーター。東京理科大学大学院卒。元SE。小学生の頃から教育書を読んでいた教育ヲタク。大学では、電池の素材の性質について実験とコンピューターシミュレーションを比較する研究を行っていたことがきっかけでSEになる。出産&育休後、子ども向けプログラミング教室講師、子どもたちの考える力を育てるオンライン塾の講師。