190
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonで最も美しいOPPAIを描いた人が優勝

Last updated at Posted at 2020-07-10

#お酒飲みながら描いた、後悔はしてない
数学って美しいよねって話。

【2020年7月16日更新】
規制に引っかかっちゃったんでOPPAI、new輪、ティ首に変更

##結果
数学でOPPAIを書きます
image.png

色をつけます
image.png

new輪をつけて完成
image.png

##コード
###数学でOPPAIを書きます

py.py
import numpy as np
import matplotlib.pyplot as plt

def oppai(y):
    x_1 = (1.5*np.exp(-0.62*(y-0.16)**2))/(1+np.exp(-20*(5*y-1)))
    x_2 = (1.5+0.8*(y-0.2)**3)*(1+np.exp(20*(5*y-1)))**-1
    x_3 = (1+np.exp(-(100*(y+1)-16)))
    x_4 = (0.2*(np.exp(-(y+1)**2)+1))/(1+np.exp(100*(y+1)-16))
    x_5 = (0.1/np.exp(2*(10*y-1.2)**4))
    x = x_1+(x_2/x_3)+x_4+x_5
    return x

def plot_oppai(x, y):
    plt.title('oppai')
    plt.axes().set_aspect('equal', 'datalim')
    plt.grid()
    plt.plot(x, y, 'black')
    plt.show()

def main():
    y = np.arange(-3, 3 + 0.01, 0.01)
    x = oppai(y)
    plot_oppai(x, y)

if __name__ == '__main__':
    main()

###良さげな画像からカラーコードを取得します
ここに良さげな画像をアップロード(例:kirara.png)
https://www.peko-step.com/tool/getcolor.html
カラーコードを取得
肌色:#F5D1B7
ティ首:#C87B6D
new輪:#E29577

###色をつけます
oppaiを弄るだけです。

py.py
def plot_oppai(x, y):
    plt.title('oppai')
    plt.axes().set_aspect('equal', 'datalim')
    plt.grid()
    plt.plot(x, y, '#F5D1B7')
    plt.fill_between(x, y, facecolor='#F5D1B7', alpha=0.8)#肌
    plt.axvspan(1.52, 1.59, 0.51, 0.53, color = '#C87B6D')#ティ首
    plt.axvspan(0, 0.18, 0.05, 0.5, color = '#F5D1B7')#補正
    plt.show()

###new輪を描いて完成
こいつもoppaiを弄るだけです。

py.py
import matplotlib.patches as patches
def plot_oppai(x, y):
    plt.title('oppai')
    plt.axes().set_aspect('equal', 'datalim')
    plt.grid()
    plt.plot(x, y, '#F5D1B7')
    plt.fill_between(x, y, facecolor='#F5D1B7', alpha=0.8)#肌
    w=patches.Wedge(center=(1.55, 0.1),r=0.2,theta1=120,theta2=240,color='#E29577')#new輪
    ax = plt.axes()
    ax.add_patch(w)
    plt.axvspan(1.52, 1.59, 0.51, 0.53, color = '#C87B6D')#ティ首
    plt.axvspan(0, 0.18, 0.05, 0.5, color = '#F5D1B7')#補正
    plt.show()

###最終的なコード

py.py
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches


def oppai(y):
    x_1 = (1.5*np.exp(-0.62*(y-0.16)**2))/(1+np.exp(-20*(5*y-1)))
    x_2 = (1.5+0.8*(y-0.2)**3)*(1+np.exp(20*(5*y-1)))**-1
    x_3 = (1+np.exp(-(100*(y+1)-16)))
    x_4 = (0.2*(np.exp(-(y+1)**2)+1))/(1+np.exp(100*(y+1)-16))
    x_5 = (0.1/np.exp(2*(10*y-1.2)**4))
    x = x_1+(x_2/x_3)+x_4+x_5
    return x

def plot_oppai(x, y):
    plt.title('oppai')
    plt.axes().set_aspect('equal', 'datalim')
    plt.grid()
    plt.plot(x, y, '#F5D1B7')
    plt.fill_between(x, y, facecolor='#F5D1B7', alpha=0.8)#肌色
    w=patches.Wedge(center=(1.55,0.1),r=0.2,theta1=120,theta2=240,color='#E29577')#new輪
    ax = plt.axes()
    ax.add_patch(w)
    plt.axvspan(1.52, 1.59, 0.51, 0.53, color = '#C87B6D')#ティ首
    plt.axvspan(0, 0.18, 0.05, 0.5, color = '#F5D1B7')#補正
    
    plt.show()

def main():
    y = np.arange(-3, 3 + 0.01, 0.01)
    x = oppai(y)
    plot_oppai(x, y)

if __name__ == '__main__':
    main()

##まとめ
数学って美しい
ティ首もnew輪も、好きな色に変えて遊んでくだせぇ
ピンクのティ首が好きって人はLGTMを、いやいや、黒いティ首の方が興奮するやろって人はフォローお願いします

##参考
・これのおかげ

Matplotlib&Seaborn実装ハンドブック (Pythonライブラリ定番セレクション)

・私のバイブル

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践

・全国の一流インテグラーが創造したOPPAI関数をPythonで再現してみた
[・指定範囲を塗り潰す関数]
(https://python.atelierkobato.com/fill_between/)

190
73
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
190
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?