TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

スーパー楕円をGNU Rの等高線を使って描画する

スーパー楕円という図形をGNU Rを使って書いてみました。

f:id:tamanobi:20150718053943p:plain

上の図形のことをスーパー楕円と言います。名前がちょっと安っぽい気がしますね(笑)

スーパー楕円というのは、普通の円よりも丸みを感じる(主観)曲線です。通常の円(正円)よりも、四角形に近い形をしています。イメージとしては、円と角丸四角形の中間的な図形です。

円とスーパー楕円の比較をしてみます。

スーパー楕円と円の違い

f:id:tamanobi:20150718054401p:plain

楕円は長軸と短軸の比率が大きなると、尖って見えます。一方、スーパー楕円はそれほど尖って見えません。

スーパー楕円は、通常の楕円よりも尖って見えないので、見る人に安心感を与えてくれそうです。不思議と柔らかそうな気もしてきます。

スーパー楕円を書いてみる

スーパー楕円を描く方法として、以下の三つを考えました。

今回紹介するのは、GNU Rでスーパー楕円を描く方法です。GNU Rを使用する方法は、他の二つよりも遥かに簡単です。

Adobe Illustratorで書くには、数式をパスに変換するスクリプト(JSX)が必要だったため、学習コストを考慮して断念しました。エクセルについては、各点を計算するときに、絶対値を用いた記述が困難だったため、断念しています*1

GNU Rでスーパー楕円を記述する

GNU R(日本ではR言語と呼ばれがち)とは、統計解析が得意な言語及び開発実行環境のことです。初期状態でさまざまな種類のグラフを簡単に作図できます。

今回は豊富なグラフ機能のうち、等高線グラフを使用してスーパー楕円を書きます。

スーパー楕円の式(陰関数)

次に示す曲線の式は r = 2.5のとき、スーパー楕円と呼ばれます。 r=2のとき、円の方程式と等価ですね。

\left|\frac{x}{a}\right|^r+\left|\frac{y}{b}\right|^r - 1 = 0

このような f(x, y) = 0という形式で表した関数を陰関数と言います。円の方程式も双曲線の式も陰関数の一種です*2

等高線を使って、陰関数のままグラフを描画する

GNU Rを含む多くのソフトでは、陰関数のままではグラフを描画できません。しかし、GNU Rの等高線グラフを使うと、陰関数を陽関数に式変形しなくても、簡単に描画できます。

GNU Rソースコードはこちら。

等高線グラフでスーパー楕円を描画する

実行結果

スーパー楕円が表示されます。ソースコード中のaとbの値を書き換えれば、細長いスーパー楕円が描かれます。 f:id:tamanobi:20150718054214p:plain

出力結果をPDFなどに保存してベクターファイルを取り扱えるソフトウェア(例:Adobe Illustrator, Inkscape)でグラフ枠を消去すれば、スーパー楕円の縦横比を自由に変更できますね。

参考文献

*1:陰関数を媒介変数を用いて陽関数に式変形するまでは計算しました

*2:陽関数 \left(y = f(x)\right)の例,  y = x^{2},  y = \frac{1}{x}。陰関数 \left(f(x, y) = 0\right)の例,  x^{2}+y^{2} -1 = 0,  xy - 5 = 0