今回は日本で一番人気の漫画である
Hunter x Hunterに登場するアイテム
「リスキーダイス」をMatplotlibで
制作してみました

解説動画はこちら



リスキーダイスについての説明は
改めてする必要も無いでしょうけども
一応やっておきますね

HUNTER × HUNTER に出てくる
アイテムの一つで20面体のサイコロ

19面が大吉で、1面が大凶
大吉が出るととてもいいことが起こる
ただし大凶が出るとそれまでに出た
大吉分がチャラになるほどの不幸が起きる

という素敵なアイテムです

これを作っていくのを考えましょう

正20面体は正三角形が
20個組み合わさった多面体です

これを展開したものを
Matplotlibで描写していきます

正三角形を描くには
3点が必要です

三角形

頂点の座標
正三角形の高さは
公式で求められます

それぞれの座標を求めて3角形を描き
展開図になるように3角形を
配置すれば良いですね

ただそれだけだと組み立てられないので
余白、のり代部分を作ってあげます

Matplotlibで描画する際には
三角形を描くメソッド
matplotlib.patches.Polygon
というのが有ります

これに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で制作してみました

作りたい方は画像をダウンロードして
印刷して工作してみて下さい

それでは