わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

画像生成の方法

GitHubで公開している三角パズルsolverですが,今朝,sample以下を大幅に見直し,それに合わせてlib以下も書き換えました.lib/helper.rbでこれまで定義していたメソッドはモジュールTrianglePuzzle::Helperに入れ,外部コマンド(convert,ffmpeg)やフォント(Liberation-Sans-Regular*1)が利用可能かチェックするメソッドを新たに定義しました.
画像は,ImageMagickのconvertコマンドに,引数を与えて生成させています.その座標は,Rubyスクリプトで算出しています.image_stepbystepという名前のブランチをmasterから派生させ,作り方が分かるよういくつかの画像を置きました*2.本記事でも画像を1枚ずつ,紹介することにします.
まずはキャンバスを用意します.400x400とし,分かりやすいようskyblueで塗りつぶしましておきます.

次に,適当な半径の円を描きます.この円は,本来の(問題や解答の)図には出現しない,いわば基準線です.

10個の数を置くための位置を決め,線で結びます.

6個の和を置くための位置を決め,点線を引きます.「2つの数の和」の先は,3箇所とも,円周上にあります*3

6個の和を乗せるための四角形を配置します.

6個の和を置きます.1桁でも2桁でも,センタリングさせています*4

10個の数を乗せるための円を配置します.

10個の数を置きます.ここはすべて1桁なので,センタリングの方法は共通です.

キャプションを置きます.

図は一応完成,なのですが,上や左に比べて,下と右の余白が大きいのが気になります.そこで,左と,余白の長さが同じになるように,下と右をカットします.

左・下・右の余白は同じになりました*5が,画像サイズが当初の400x400よりも小さくなってしまいました.そこで,400x400に拡大します.

これで出来上がりです.が,白塗り・円なしの,デフォルトの図も,貼り付けておきましょう.

*1:このフォントは,http://www.fontex.org/download/liberation-sans.ttfよりダウンロードできます.Ubuntuでは,「apt-get install fonts-liberation」コマンドでインストール可能です.

*2:スクリプトは,lib/image.rbのみ変更しています.

*3:その3つの点で正三角形になります.それらと,10個の数字のうち最も中心から遠い3つの数を置く中心点を結ぶと,正六角形ができます.

*4:現在,フォント名は「Liberation-Sans-Regular」固定でして,フォントやフォントサイズの変更は今後の課題です.

*5:上の余白の変更は,キャプションの配置も変更する必要があるので,今回,行っていません.