正多角形を作成しましょう

スクラッチの課題でよく見かける正多角形を描画するプログラムを作成しましょう。


正多角形を描画しましょう。

URL:https://scratch.mit.edu/projects/editor/?tutorial=getStartedを開いてスクラッチを始めましょう

小学校の授業と連動してプログラムで正多角形をかけるようにするという課題があるようです。それに挑戦してみましょう。

あくまで私見ですが、プログラムを作成するときにパソコンの前に座って「さて、何から始めたらいいのですか?」というような感じで途方に暮れている方を散見します。プログラムを作成するためには実際の作業を思い浮かべることが大切だと思います。

まず「正多角形を描画しましょう」と課題が与えられたときにパソコン(プログラム)を離れて一旦実際の作業を思い浮かべてみてください。正多角形といっても正三角形も正方形もありますし、正5角形、正6角形と無限にあります。

何をしたらよいかわかりませんが、とりあえず正三角形を描いてみることを想像します。紙と鉛筆以外に何が必要でしょうか。定規は必要だと思いますね。あとは角度を測るもの、分度器ですね。またはコンパスがあれば描けますね。

底辺として任意の長さの直線を引いて両端から分度器で60度測って直線を引く事で正三角形が描けます。

コンパスでしたら底辺を描いた後、底辺と同じ長さの弧を描いて交点と端を直線で結べば正三角形が描けます。

正方形はどうでしょう。分度器であれば底辺から90度測って底辺と同じ長さの線を引き新たな線の端から90度測って同じ線を引く。この繰り返しで作成できますね。

コンパスで正方形はちょっと難しいようですができるようです。底辺の中点と直交する直線を描いて、交点から底辺の長さの半分の円を描き先ほどの直交する線の交点を求めます。この交点から底辺の端までの長さの半径を持つ円を描くと子の底辺と内接する円になります。底辺の端から底辺の長さの半径を持つ円をそれぞれ描くと先ほどの内接円との交点が正方形の残り2つ頂点になりますので定規でつなげれば正方形が描けます。(間違ってたらごめんなさい)

正五角形の場合、正六角形の場合はどうでしょう。分度器の場合は角度がわかれば同じ作業で作図が可能ですね。コンパスの場合はそれぞれ大変なようです(作図するものによって手順が違う)。

では、これらの作業をプログラミングする場合どちらの手法が簡単でしょうか。分度器方式の方が簡単ではないでしょうか。

実際の作業をまとめましょう

分度器方式の作業をまとめてみます。

  1. 底辺を描く(任意の長さの直線)
  2. 辺の端から角度を測る(3角形なら60度、4角形なら90度)
  3. 測った角度通りに底辺と同じ長さの直線を描く
  4. 上記2番目の作業を角形の数(3角形なら3回、4角形なら4回)繰り返す。底辺を描くも1回にする

角度についてはスクラッチの~度回すは多角形を描画するときの補角になります。正三角形の60度の場合は120度回すになります。正方形の90度の場合は補角も90度です。正五角形の場合は108度ですが補角の72度回で描画できます。

これは非常に都合がよくて、正n角形の場合内角を計算せずとも補角は360割るnで計算できます。

正n角形を描くプログラムを書く前にすることをまとめます。

  1. 画面上のどこかの点から任意の長さの底辺を描きます。
  2. 描きを割った場所で360割るn度(補角)回す。
  3. 上2つの動きをn回繰り返す。(どこかの点からではなく直前に描画された線の端から底辺と同じ長さの線を引く)

画面上のどこかの点から任意の長さの底辺を描きます。

やるべきことはわかったので上記のことがどうすれば実現できるか考えます。

線を描くことはできますか

割り算できますか

同じ長さの線が引けますか

繰り返しできますか

プログラムしてみましょう

線を描く方法ですがそのまま(初期状態)では線は描けません。画面左下の拡張機能を追加をクリックします。

拡張機能を選ぶという画面が表示されますのでペン(スプライトで絵を描く)をクリックします。

元の画面に戻ってきますので左の一番下にペンのブロックが表示されます。

今回この中で使うブロックはペンを下ろすと全部消すの2つです。ペンを下してからスプライト移動するとスプライの移動の軌跡に線が引かれます。全部消すはペンで描かれたものすべてを消します。

動作確認してみます。ペンを下すブロックのシテに10歩動かすのブロックをつないで10歩を100歩に変更します。ブロックをクリックして実行します。100歩分の直線が描かれました。

次に正三角形を描くとして120度(360割る3であり正三角形内角の60度の補角です)回します。

今描いた線を全部消すのブロックで消してScratchキャットをもとの位置に戻します。右下のスプライトのxの値を0にします。赤丸内が初期値です。向きは90度が左を向いている状態です。

今のブロックの下に120度回すをくっつけます。(15を120に変更)

100歩動かすを下につけ、120度回すをくっつけることをあと2回して3回線を引いて3回角度を変えてください。

最後の120度回すは不要ですが、同じ動作を繰り返しているという意味でつけておいてください。これを実行すれば正3角形が描けます。

正方形ならもう1組(歩いて回す)足してすべての120度を90度に変更すればよく、正五角形ならさらにもう1組(歩いて回す)足して回す角度を72度に変更すれば書くことができます。

しかしこれではプログラムとして効率がよくありませんし、歩いて回すブロックの数を間違えたり回す角度を間違えたりする可能性が高いです。歩いて回す動作をn角形のn回繰り返すようにしてみます。

まずは正三角形で作り直します。歩いて回す1組のブロック以外を消します。消し方はいらないブロックの塊の一番上をドラッグして左のコードのエリアにドロップしてください。右クリックしてブロックを削除でも構いません。

次に制御ブロックの10回繰り返すで歩いて回すの1組を囲みます。10を3回にします。回す角度は120です。

以前の線を全部消すのブロックで消して実行してみます。

あとは繰り返す数と回す角度を変更するだけで済みます。ただ回す角度はつど計算しなければなりませんのでまだ間違う可能性が高いですし面倒です。計算をスクラッチにお願いします。

計算式自体は簡単です360割るn(n角形なので正三角形なら3、正方形なら4です)とすればいいだけです。演算ブロックの割り算を角度の中にドラッグします。プログラムの場合掛け算の記号はアスタリスク、割り算はスラッシュになっている場合が多いようです。

割られる数を360割る数を描画したい角形の数にします。この数は繰り返しの数と同じなので2か所を同じ数にすれば良いようになりました。

2か所同じ数字にするということさえ間違わなければこれで完成です。ただ、360のところを変更してしまったり、1か所だけ変更したりするとおかしなことになってしまいます。できれば完成したプログラムの中を触らずにいろいろな正多角形が描けるプログラムにしたいです。

今回は調べるの中のあなたの名前は何ですか?を全部消すの下にはめ込んで文字を何角形を作りますかに変更します。そうすると画面に何角形を作りますかと表示されて文字入力できるようになります。

文字入力の後確定するとその後のブロックが実行されます。しかしこのままでは入力された数値がプログラムに反映されません。入力された値は調べるブロックの答えに格納されていますので答えを先ほどの2か所にドラッグします。

最後にイベントから始めるの旗をクリックされたらを一番上にくっつけます。これでOKです。

しかし色々と試してみるとおかしなことになる場合があります。正15角形とかを描きたいと思って大きな数値を入れると途中で描画が止まってしまいます。その状態で再度実行すると変な方向から描画しようとします。

100歩動くのまま正15角形などを描こうとすると図形自体が大きくなりはみ出してしまいます。はみ出してしまったところでプログラム終了しScratchキャットが右(90度)ではない方向を向いたままになってしまいます。

初期が画面の真ん中から始まっているので初期の場所を下に移動し、もし前回Scratchキャットが90を向いていない可能性があるのでペンを下す前に初期の位置と向きを決めます。

さらに歩数はn角形のnの大きさに比例して小さくなるようにnで割るようにします。(nは入力された答えになります)

あとはScratchキャット自体は見えないほうがよいのでそのあたりを追加します。

大まかに出来上がりのブロックの説明をします。

  1. まず、Scratchキャットのスプライトを隠します。
  2. 前回の図形(正多角形が残っているかもしれないので)を消します。
  3. 何角形を作るか聞きます。入力された値は答えに保存されます。ここは半角英数の数値でないと作動しません。もちろん正の整数です。
  4. 底辺を下の方から書き始めたいので動きのブロックにx座標とy座標を指定するブロックで位置を指定します。数値はいろいろと試してこの数値に決めました。スプライトが動く画面の真ん中が(0,0)となり右と上が正の値になります。
  5. 前回の描画終わりにスプライトは右を向いているはずですが、おかしな終わり方をしたらスプライトがどこを向いているかわからないので初期値の90にして右に向かって水平を向くように調整
  6. ペンを下して描画開始
  7. 繰り返しは入力された数値回になります。正9角形の9と入力されたら9回繰り返します。
  8. 1辺の長さを800歩分の長さを入力値で割ったものにします。固定だとはみ出すことがあるので。800という値はいろいろ試してこの値にしました。
  9. 次の辺に対する角度は中心角(補角と同じ)になるので360度を入力値で割っています。

以上が正多角形のプログラムになります。この方法が唯一の最良のプログラムとは限りませんのでご自身でいろいろと試してみてください。

今回の完成は正多角形にあります。自由にお使いください(右上の中を見るをクリック)。変更しても元に戻りますので差し替えたりしてお使いください。ローカルに保存できますので改めてコンピュータから読み込むをしていただければ自分が作ったものとして使えます。