おっぱい関数ジェネレーターを作ってみた【初リリース】

２０１８年１０月上旬からプログラミングスクールに通う駆け出しエンジニアです。

本格的にプログラミングを学習して約２ヶ月、たまたま昨日サービスを初リリースしました。名付けて、おっぱい関数ジェネレーター。英語でいうと、　OpPai　Function　Generatorです。略して、OPFG。正真正銘のクソアプリと自負しています。

たまたま、アドベントカレンダーをみていたら、12月１７日のクソアプリに枠が空いていたので、これも何かの縁と思い、qiitaのクソアプリに投稿させて頂きます！

どうぞ宜しくお願いいたします。
・[おっぱい関数ジェネレーター](https://opfg.xyz)
![gz_opfg.gif](https://qiita-image-store.s3.amazonaws.com/0/314351/fbeac691-b752-8c02-96c5-653077fa9df4.gif)

## 私が定義したおっぱい関数の解説
### おっぱいの基本式
おっぱいの基本式はこちら！

```math
y = xlogx
```

![xlogx.png](https://qiita-image-store.s3.amazonaws.com/0/314351/bd4bdf96-6264-861b-371a-d52e27c93f10.png)
引用：[xlogxの極限，グラフ，積分など](https://mathtrain.jp/xlogx)

こちらの式にパラメーター調整して作成したグラフがこちら！
<img width="371" alt="スクリーンショット 2018-12-16 20.48.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/314351/8a03b73f-2f91-51b9-359a-4420eb4617cb.png">
わりと、おっぱいに近づいていますね。次はちくび関数に移ります！

### ちくび関数
ちくび関数はガウス関数(ガウシアン関数)を用いています。おっぱい関数の作り手の中では有名な関数ですね。

```math
y = a e^{-\frac{(x-b)^2}{2c^2}}
```

![1200px-Normal_Distribution_PDF.svg.png](https://qiita-image-store.s3.amazonaws.com/0/314351/e1e504d9-5632-9e47-a571-d62419c7c940.png)
引用：[ガウス関数：wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E9%96%A2%E6%95%B0)

こちらを、私がパラメーター調整し、上述したおっぱいの基本式に埋め込んであげます。埋め込む場所は、微分して0になる部分ですね！

おっぱいの基本式＋ちくび関数のグラフがこちら！
<img width="451" alt="スクリーンショット 2018-12-16 20.58.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/314351/10785aaf-ffed-7d2e-5515-827c66c865fc.png">

おっぱい！！！

これだけでも十分ではありますが、個人的におっぱいって、非おっぱい領域があって初めて美しいおっぱいが際立つと思っています。

刺し身をご想像してみて下さい。ただお皿にぽんっと置いてあるよりも、周りの白い大根や黄色い花があって、映えるじゃないですか！

なので、非おっぱい領域も表現することにしました。
### 非おっぱい領域
非おっぱい領域は、シグモイド関数を用いています。

```math

y = {\frac{1}{1+e^{-ax}}}
```
![220px-SigmoidFunction.png](https://qiita-image-store.s3.amazonaws.com/0/314351/112621d2-654f-503d-7fb1-8ac698d9064a.png)
引用：[シグモイド関数：wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E9%96%A2%E6%95%B0)

変数`a`はゲインとよばれ、図は`a=1`で、標準シグモイドです。実は、`a`が大きくなればなるほど、急激に`0→１`に変化します。

つまり、`a`を大きな値にすることで、おっぱいに影響を与えることなく、非おっぱい領域(下乳)のラインが書けるんです！

さらに、胸部分に対し、0、それ以外は１になるようなシグモイド関数をかけ合わせれば、無限大に発散する胸部分を打ち消すことが可能に！（これが１番大変だった…）

パラメーターを調整したおっぱい関数の完成形(グラフ)がこちら！
<img width="464" alt="スクリーンショット 2018-12-16 21.13.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/314351/822d81bc-4e43-4ca2-af96-0811a766b2d1.png">
正真正銘のおっぱいができました！私独自のおっぱい関数が誕生した瞬間です。

```math

opf(y) = {\frac{0.12e^{-4(8(y-(2-4e^{-1}))^4)} + 1.2(y-2)\log(-\frac{1}{4}(y-2))-0.2(1+e^{-35(y-2)})^{-1}}{1+e^{-3(y+2)}}}
```
##技術的な話
描画はcanvasを使用しています。あとはオプションを調整すると、貧乳から巨乳、さらに乳首、おっぱいのハリまで調整できるようにしました。

またダウンロードボタンを押すと、canvasに描画されたおっぱい関数が画像化されます。

数式の表現や画像化は、ライブラリ`mathjax`、`html2canvas`を使っています！

##最後に
初リリースがおっぱい関数ジェネレーターになるなんて、スクール入学当初は思いもしませんでした。そして、スクールにて、大きなドヨメキと感動を生むことにも成功しました。

今後もクソアプリを作っていきます！最後までご覧いただき、ありがとうございましたm(_ _)m
・[おっぱい関数ジェネレーター](https://opfg.xyz)

## OPFGを作れるようになるまでの道のり
- [【1ヶ月目】プログラミングをガチで毎日12時間以上くらいやった結果](https://note.mu/gurutaka/n/nbfb9787bd729)
- [【2ヶ月目】プログラミングをガチで毎日12時間以上くらいやった結果](https://note.mu/gurutaka/n/n9800fdf3250b) 

## 元祖企画
[Youtube：理系大学生が本気出しておっぱい型の関数を作ったら、誰が見てもおっぱいになったwwwww](https://youtu.be/CaSQ6OjFSog)

## 参考URL
[ニコニコ：【数学】おっぱい型の関数を作ったったwwwwwwwwwwwww](https://www.nicovideo.jp/watch/sm31579883)