Hatena::ブログ(Diary)

わさっき RSSフィード

2019年01月02日

[] 九九の入った正二十面体

はじめに,完成した正二十面体を:

f:id:takehikom:20190101224618j:image

展開図は:

f:id:takehikom:20190101224611j:image

f:id:takehikom:20190101224607j:image

f:id:takehikom:20190101224602j:image

後述のプログラムで,SVG画像として生成したのち,JPEGにしました.SVGのファイルは以下よりダウンロードしてください.

  • icosa-test.svg: 隣り合う面の辺に添えるのは,「(1)」から「(30)」まで
  • icosa1.svg: 隣り合う面の辺に添えるのは,かけられる数とかける数を反対にした式
  • icosa2.svg: 隣り合う面の辺に添えるのは,積が同じになる式

ブラウザFirefox)の印刷プレビューで,150%に拡大し,用紙を横にすると,A4用紙でいい感じに印刷できます.

展開図で何も書かれていないか,中央が◎の三角形は,のりしろとなり,出来上がりの正二十面体の表面には出てきません.それと切り込みも必要です.http://polyhedra.cocolog-nifty.com/polyhedra20.pdfをご覧ください(このPDFをリンクするページを,あとで取り上げます).


きっかけは,年末に読み直した本です.

  • 坪田耕三: おもしろ発見!九九の授業づくり, 国土社 (1994). isbn:4337478299

目を引く図形が,p.15に載っていました.

f:id:takehikom:20190101224615j:image

最上段の左を見ると,丸囲みの「あ」の周囲に,「4×2」「3×1」「8×8」という,九九の式があり,それらを囲う線は,正三角形となっています.丸囲みの「あ」から「ひ」まで,同様に正三角形で,各辺には九九の式が添えられています.そして,どれも異なる九九の式です.ここで個数を確認しておくと,「あ」から「ひ」までは27文字あり,3×27で81個の式を書くことができ,九九(総九九)の式の数と一致します.一つ前のページでは,27個に分かれた正三角形の図が描かれています.

三角形を並べる際,共有する辺のところには,九九の答えが等しくなるような式が配置されるようにしまていす.例えば最下段の右,丸囲みの「せ」の左下は「2×3」で,隣り合う式は「6×1」です.

これは,二次元平面上の並べ方です.これを三次元の空間上で実現すれば,回転させてどこを見ても,それぞれの辺には積が等しい九九の(異なる)式を書くことができるはず…ということで,空間図形を作ることにしました.

実現の前に,少し検討します.正多面体で面の数が最大となるのは,正二十面体です.それぞれの面は,正三角形です.上の例では,27個の正三角形を使っていましたので,7個分を除外すればいいというわけです.

辺の数も,見ておきましょう.正二十面体の辺の数は,30です.昨日付けの記事の第1問(九九で,「3×5」と「5×3」のように,かけられる数とかける数を反対にしてできる,異なる式の組み合わせ)は36通りですので,式の数のほうが多いと言えます*1

これらを考慮して,最初に作成する正二十面体では,隣り合う面の辺に添えるのは,「3×5」と「5×3」のように,かけられる数とかける数を反対にした式にします.

九九の式について,まず,「a×b」の式で,「2≦a<b≦9」または「a=1かつb=8, 9」の条件を満たす形を選びます.「2≦a<b≦9」を満たす(a,b)は28通り,「a=1かつb=8, 9」のほうは2通りで,合わせて30通りです.自作のプログラムではこのペアを生成したのち,展開図上にランダムに配置し,「b×a」の式も取り付けました.

もう一つ,作成する正二十面体について,隣り合う面の辺に添えるのは,積が同じであればよいことにします.出来上がった図形では「9×4」と「6×6」*2が隣り合っています.こちらは昨日付けの記事の第2問と同様に,等しい積になる式を配列をつくり,シャッフルしてから,ランダムに2つずつ式をpop(配列の後ろから値を取り出し)し,辺に対応付けていきました.

正二十面体の展開図は,wikipedia:正二十面体より見ることができますが,これでは自作(貼り付け)が困難です.少し探すと,糊付けまで考慮されたペーパークラフトが公開されていました.

あとは自分なりにコーディングを行いました.作成したプログラムGistに公開します.単一のRubyスクリプトであり,rubyコマンド以外に必要なソフトウェアはありません.実行すると,カレントディレクトリに3つのファイル(icosa-test.svg,icosa1.svg,icosa2.svg)を生成します.

コードに関して,1つの面(正三角形)に関するIcosaDrawer::Triangleクラスと,SVG描画に関するIcosaDrawer::Drawerクラスを定義しています.前者のクラスには@rot0,@rot60,@rot120,@rot180,@rot240,@rot300という6つのインスタンス変数を入れていて,三角形の辺に添える文字列を格納します.また別のインスタンス変数@invertedについて,この値が真なら,展開図上で逆三角形にあるものとみなし,@rot60,@rot180,@rot300の値を参照してSVG上の文字列となります.偽なら,底辺のある(通常の配置の)三角形とし,@rot0,@rot120,@rot240を参照します.かけ算の式となる文字列には日本語文字を使用せず,乗算記号の「×」は,×と記述しています.

*1:この36通りに,「a×a」の形の式は含まれません.『おもしろ発見!九九の授業づくり』の,27個の正三角形の配置も,よく見ると,「1×1」「5×5」「7×7」「8×8」「9×9」という,積が九九で1通りしか出現しない式は,外周にあり,他の三角形と接していないのです.

*2:最初の写真の右下の図形です.「9×9」に見えるかもしれませんが,これは「6×6」です.各三角形の辺に沿うよう,式を配置しています.

トラックバック - http://d.hatena.ne.jp/takehikom/20190102/1546354800