おはようございます。この4月から小学校生活の始まった長男。早速呼び出しがかかり先日保健室へ引取りに行った@kjunichiです。
陰関数とは
x2+y2+z2=1
のような形をしてy=で表現していない形式の関数をそう呼んでいるようです。 Wikipediaの説明読んでも数学を専門的にやってないので、記事の書く際の説明の 参考にならなかった。。
どうすればプロットできるのか
答え:数値を代入して試す
そうはいってももう少し説明すると
上の例だと、x2+y2+z2-1=0と式を変形した、 左辺=0 にして、左辺が正、負が変化するx,y,zをプロットして つなげれば、おおよその式が満たす曲面が描画される。
仮想3D空間にプロットする
曲面を構成する点から面をつくるのは難しい
曲面を構成する点から面をつくるのは、特許がきれたマーチングキューブ法を用いるのが 常套手段の模様。
しかし、これ、自前で実装するの面倒。
仮想3D空間にプロットする
立方体でプロットすればなめらかな面は表現できないが、数式のおおよその概形は 掴めるのでは?
マインクラフトPi版はPythonでブロックを任意の座標における。 具体的には以下の様にPythonで記述することで実現できる。
setBlock(x,y,z,id,[data])
陰関数の良さげな式を見つけた
TLでたけのこの里を数式にされた方の以下のツイートを見かけた。
たけのこの里 数式化 pic.twitter.com/8bU5DWWOUQ
— ぺん! (@tompng) 2018年3月15日
実はこの式が陰関数形式であって、これを自前でプロットしてみたくなり、試行錯誤している最中に Minecraft Pi Editionでプロット出来るのでは?となりやり始めた。
成果物
遊び方
git clone https://github.com/kjunichi/mcpi-takenoko.git cd mcpi-takenoko python3 takenoko.py
そのままPlotをクリックするとたけのこの里の式のプロット結果が出現する。
- preset 1:たけのこの里
- preset 2:球
- preset 3:ローマ曲面
応用編
preset以外にもいろいろな数式を試して描画してみるとなにか発見があるかも!?
学べたこと
Raspberry Piでの画面キャプチャー
Raspberry Pi版マインクラフトの画面をキャプチャーするには普通のXの画面キャプチャーツールだと、ウィンドウが真っ黒になってしまう。 これはRaspberry Pi版マインクラフトがGPUを使って描画している為と思われる。
このツールで無事キャプチャー出来た。
入力された数式のチェック
astモジュールを使って、 構文中に文字列を含んだらNGにすることで、
import os os.system('rm ./daijinafile.txt')
のような危険な入力を防ぐ工夫をしてみた。
関連記事
- Maximaでリーマン予想のゼータ関数をプロットした
- BlenderでPython使って最速降下曲線を描いてみる
- 1/7がつくる楕円をJulia言語でプロットする
- シェルスクリプトのかわりにPythonでマルチプラットフォームで動かそうとして学んだこと
- Raspberry Piの温度をgRPCを使ってElectronで作ったデスクトップマスコットに表示させた
- Minecraft Win10版にnode.js以外でGo言語でもつなげた
- Juliaでゼータ関数を直接jupyterにプロットしたり、マインクラフト(MCPI)にプロットした - non vorrei lavorare