今回は日本で一番人気の漫画である
Hunter x Hunterに登場するアイテム
「リスキーダイス」をMatplotlibで
制作してみました
解説動画はこちら
リスキーダイスについての説明は
改めてする必要も無いでしょうけども
一応やっておきますね
という素敵なアイテムです
これを作っていくのを考えましょう
正20面体は正三角形が
20個組み合わさった多面体です
これを展開したものを
Matplotlibで描写していきます
正三角形を描くには
3点が必要です

頂点の座標
正三角形の高さは
公式で求められます
それぞれの座標を求めて3角形を描き
展開図になるように3角形を
配置すれば良いですね
ただそれだけだと組み立てられないので
余白、のり代部分を作ってあげます
リスキーダイスの展開図を描画するコードはこちら
実行すると・・・
こんな感じのが出来上がります
リスキーダイス

これをカラー印刷すると・・・

いらない部分を切り取って
赤い線は切り取り線で
白い部分がのり代です
いい感じに糊付けすると・・・

いい感じにサイコロになりました
W杯
日本 vs クロアチア
何度か振った結果・・・
大吉しか出ませんでしたーーー
なので、クロアチアにも
勝ってくれる事でしょうwww
今回はリスキーダイスを
Matplotlibで制作してみました
作りたい方は画像をダウンロードして
印刷して工作してみて下さい
それでは
Hunter x Hunterに登場するアイテム
「リスキーダイス」をMatplotlibで
制作してみました
解説動画はこちら
リスキーダイスについての説明は
改めてする必要も無いでしょうけども
一応やっておきますね
HUNTER × HUNTER に出てくる
アイテムの一つで20面体のサイコロ
19面が大吉で、1面が大凶
アイテムの一つで20面体のサイコロ
19面が大吉で、1面が大凶
大吉が出るととてもいいことが起こる
ただし大凶が出るとそれまでに出た
大吉分がチャラになるほどの不幸が起きる
大吉分がチャラになるほどの不幸が起きる
という素敵なアイテムです
これを作っていくのを考えましょう
正20面体は正三角形が
20個組み合わさった多面体です
これを展開したものを
Matplotlibで描写していきます
正三角形を描くには
3点が必要です

頂点の座標
正三角形の高さは
公式で求められます
それぞれの座標を求めて3角形を描き
展開図になるように3角形を
配置すれば良いですね
ただそれだけだと組み立てられないので
余白、のり代部分を作ってあげます
Matplotlibで描画する際には
三角形を描くメソッド
matplotlib.patches.Polygon
matplotlib.patches.Polygon
というのが有ります
これに3点を渡してあげれば
三角形が描画出来ます
あとは「大吉」などの文字を
ax.text で描画してあげれば
20面体のサイコロとなりますが
Matplotlibは初期状態だと
日本語フォントに対応してないので
別途インストールが必要です
これに3点を渡してあげれば
三角形が描画出来ます
あとは「大吉」などの文字を
ax.text で描画してあげれば
20面体のサイコロとなりますが
Matplotlibは初期状態だと
日本語フォントに対応してないので
別途インストールが必要です
リスキーダイスの展開図を描画するコードはこちら
import matplotlib.pyplot as plt import matplotlib.patches as pat fig = plt.figure(figsize=(16, 16)) ax = plt.axes() # 正20面体 l=1 h = (l**2 - (l/2)**2) ** 0.5 for i in range(5): x=l*i # 1段目 p = pat.Polygon(xy = [(x,0), (x+1,0), (x+l/2 , h)],fc = "gray",ec = "black") ax.add_patch(p) p = pat.Polygon(xy = [(x+l/2,h), (x+l/2+l,h), (x+l , 0)],fc = "white",ec = "black") ax.add_patch(p) # 2段目 p = pat.Polygon(xy = [(x+l/2,h), (x+l/2+l,h), (x+l , h*2)],fc = "gray",ec = "black") ax.add_patch(p) p = pat.Polygon(xy = [(x,h*2), (x+l,h*2), (x+l/2 , h)],fc = "gray",ec = "black") ax.add_patch(p) # 3段目 p = pat.Polygon(xy = [(x,h*2), (x+1,h*2), (x+l/2 , h*3)],fc = "white",ec = "black") ax.add_patch(p) p = pat.Polygon(xy = [(x+l/2,h*3), (x+l/2+l,h*3), (x+l , h*2)],fc = "gray",ec = "black") ax.add_patch(p) # のり代 p = pat.Polygon(xy = [(l*5,h*2), (l*5+l,h*2), (l*5+l/2 , h)],fc = "white",ec = "black") ax.add_patch(p) # 切り取りライン for i in range(4): x=l*i + l plt.plot([x, x+l/2], [0, h],color="red") plt.plot([x, x+l/2], [h*2, h*3],color="red") # テキスト for i in range(5): x=l*i if i!=0: ax.text(x + l/2 , h/3 , '大吉',color="white",size=30,va='center', ha='center') else: ax.text(x + l/2 , h/3 , '大凶',color="red",size=30,va='center', ha='center') ax.text(x + l , h/3+h , '大吉',color="white",size=30,va='center', ha='center') # 逆さ文字 ax.text(x + l , h*3-h/3 , '大吉',color="white",size=30,va='center', ha='center',rotation = 180) ax.text(x + l/2 , h*2-h/3 , '大吉',color="white",size=30,va='center', ha='center',rotation = 180) plt.axis('scaled') plt.axis('off') plt.show()
実行すると・・・
こんな感じのが出来上がります
リスキーダイス

これをカラー印刷すると・・・

いらない部分を切り取って
赤い線は切り取り線で
白い部分がのり代です
いい感じに糊付けすると・・・

いい感じにサイコロになりました
W杯
日本 vs クロアチア
何度か振った結果・・・
大吉しか出ませんでしたーーー
なので、クロアチアにも
勝ってくれる事でしょうwww
今回はリスキーダイスを
Matplotlibで制作してみました
作りたい方は画像をダウンロードして
印刷して工作してみて下さい
それでは