わさっきhb

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

gf: 組体操(組立体操)の荷重計算をRubyで

人間ピラミッドなどの組体操(組立体操を含む.以下「組体操」)について,荷重計算をRubyで計算するプログラムを「gf」と名づけ,GitHubにて公開しました.

実行にはRuby 1.9.2以降が必要です*1.DOT形式からPNG画像への生成にはGraphviz(dotコマンド)を,またExcelファイルの生成にはrubyXLライブラリを,それぞれ必要とします.
開発したプログラムの特徴は以下のとおりです.

  • 複数人で行う組体操の技で,各人にかかる負荷を計算します.各人の体重や,誰が誰にどれだけの割合で荷重をかけて乗っているかを,任意に指定できます.
  • 典型的な技のうち,「三角形タイプ(俵型)人間ピラミッド」「三角錐タイプ(立体型)人間ピラミッド」「やぐら」は,オプション指定により簡単に荷重などを求めることができます.「三角錐タイプ」と「やぐら」では,体重を乱数で生成し,より実態に合わせた配置での試算も行えます.(同月追記:「三角形タイプ」でも,行えるようにしました.)
  • デフォルトでは,「人数」「全重量」「最大荷重(実数)」「最大荷重(割合)=最大で自重の何倍の荷重がかかるか」「最大荷重(割合)となる者(複数ある場合は1名)の詳細情報」を出力します.オプション指定により,全構成員の詳細情報,Rubyコード,DOT形式データ,Excelファイルを出力ことも可能です.

チェックアウトと動作確認は,以下のコマンドでどうぞ.

git clone https://github.com/takehiko/gf.git
cd gf
ruby test/test_all.rb
ruby lib/gf.rb -A
unzip -l gf.zip

「典型的な技」について,主要な値を表にまとめました.(同月追記:三角形タイプを更新しました.)

分類 段数 体重 人数 最大荷重(割合) 引数
三角形 2 一律1 3 0.50 -t 2
三角形 2 乱数 3 0.43 -t 2 -m 4 -s 12345
三角形 3 一律1 6 1.50 -t 3
三角形 3 乱数 6 1.19 -t 3 -m 4 -s 12345
三角形 4 一律1 10 2.21 -t 4
三角形 4 乱数 10 1.75 -t 4 -m 4 -s 12345
三角形 5 一律1 15 3.12 -t 5
三角形 5 乱数 15 2.50 -t 5 -m 4 -s 12345
三角形 6 一律1 21 3.81 -t 6
三角形 6 乱数 21 3.11 -t 6 -m 4 -s 12345
三角形 7 一律1 28 4.81 -t 7
三角形 7 乱数 28 3.89 -t 7 -m 4 -s 12345
三角形 8 一律1 36 5.54 -t 8
三角形 8 乱数 36 4.61 -t 8 -m 4 -s 12345
三角錐 3 一律1 6 0.50 -p 3
三角錐 3 乱数 6 0.45 -p 3 -m 4 -s 12345
三角錐 4 一律1 13 1.05 -p 4
三角錐 4 乱数 13 0.78 -p 4 -m 4 -s 12345
三角錐 5 一律1 22 1.47 -p 5
三角錐 5 乱数 22 1.17 -p 5 -m 4 -s 12345
三角錐 6 一律1 37 1.72 -p 6
三角錐 6 乱数 37 1.34 -p 6 -m 4 -s 12345
三角錐 7 一律1 55 2.41 -p 7
三角錐 7 乱数 55 1.67 -p 7 -m 4 -s 12345
三角錐 8 一律1 81 2.80 -p 8
三角錐 8 乱数 81 2.02 -p 8 -m 4 -s 12345
三角錐 9 一律1 111 3.09 -p 9
三角錐 9 乱数 111 2.42 -p 9 -m 4 -s 12345
三角錐 10 一律1 151 3.85 -p 10
三角錐 10 乱数 151 2.73 -p 10 -m 4 -s 12345
三角錐 11 一律1 196 4.20 -p 11
三角錐 11 乱数 196 3.34 -p 11 -m 4 -s 12345
やぐら 3 一律1 5 0.50 -y 5
やぐら 3 乱数 5 0.46 -y 5 -m 4 -s 12345
やぐら 3 一律1 7 0.50 -y 7
やぐら 3 乱数 7 0.49 -y 7 -m 4 -s 12345
やぐら 4 一律1 9 0.74 -y 9
やぐら 4 乱数 9 0.64 -y 9 -m 4 -s 12345
やぐら 5 一律1 21 0.99 -y 21
やぐら 5 乱数 21 0.81 -y 21 -m 4 -s 12345

引数は,「ruby lib/gf.rb」のあとに指定して実行します.各出力の「max_rate=」の直後の値を,小数第2位までになるよう四捨五入し,最大荷重(割合)の値として記載しました.

このプログラムは,以下の記事で紹介したコードなどを統合・整理したものです.スクリプト名・クラス名は大幅に変更しています.

それと,excelディレクトリにgf.xlsxというファイルを配置しました*2.30人分の配置ができます.2行目以降,1行が1人分のデータで,A列に名前,B列に自重を設定します.F列は,その行の自分に負荷をかける人の名前,G列はその割合を設定します.J列とK列,N列とO列,R列とS列も同様です.Excel上で入力をする箇所は,オレンジと緑で塗りつぶしました.

*1:require_relativeを使用しているため.

*2:適当な引数を入れて生成したExcelファイルを,手動で編集して作りました.行数と列数(自分に負荷をかける人の最大数)を可変にして,RubyスクリプトからExcelファイルを生成することを試みたものの,構想どおりにコードが書けず,取り除きました.