LoginSignup
8
8

More than 5 years have passed since last update.

「おっぱい曲面」を3Dグラフで描く(2)

Posted at

『プログラミング言語 Julia でグラフを描画する』 でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。

今回は『おっぱい曲面方程式による長さ計算』を参考にして「おっぱい」を大きくする実験をしてみた。
Julia で求めた計算結果を Matplotlib でグラフ表示するようになっている。(環境を作って是非動かしてみてください)

  • ソースコードを保存する際には文字エンコーディングは utf-8 にしておくこと。
  • サンプルを起動するには、Oppai2.jl (Julia のソースコード) をエクスプローラーからダブルクリックする。
  • ソースコード内の ALPHA を大きくすると「おっぱい」が大きくなります。BETA を大きくすると「乳首」が伸びます。
  • カレントディレクトリに「Oppai2.png」というファイルができます。

注記:環境構築については、『プログラミング言語 Julia でグラフを描画する』 を参照してください。
2014/07/04 に手順 4, 6, 11 を追加しました。2014/07/04 以前に上記記事を見て環境を構築した方は手順 4, 6, 11 を追加実行してください。よろしくお願いします。

↓$ALPHA=1$の例。「おっぱい」は小さい。左ボタンドラッグすると3Dグラフが回転します。右ボタンドラッグすると拡大・縮小ができます。
alpha-1-beta-1.gif

↓$ALPHA=3$の例。「おっぱい」は大きい。左ボタンドラッグすると3Dグラフが回転します。右ボタンドラッグすると拡大・縮小ができます。
alpha-3-beta-1.gif

Oppai2.jl
# -*- coding: utf-8 -*-

using PyPlot

using PyCall
@pyimport matplotlib.cm as cm
@pyimport matplotlib.font_manager as fm
@pyimport matplotlib.pyplot as plt
@pyimport numpy as np

ALPHA = 1.0
BETA  = 1.0
GAMMA = 1.0 / ALPHA

function bust(x, y)
ALPHA * (6 * exp(-((2 / 3 * abs(x) - 1) ^ 2 + (2 / 3 * y) ^ 2) - 1 / 3 * (2 / 3 * y + 0.5) ^ 3) 
+ BETA * 2 / 3 * exp(-2.818 ^ 11 * ((abs(2 / 3 * x) - 1) ^ 2 + (2 / 3 * y) ^ 2) ^ 2) 
- GAMMA * (2 / 3 * x) ^ 4) / 8
end

fig = plt.figure()
ax = fig[:gca](projection="3d")

nx = 201
ny = 201
x = linspace(-3, 3, nx)
y = linspace(-3, 3, ny)
z = zeros(Float64, length(y), length(x))

for iy = 1:length(y)
    for ix = 1:length(x)
        z[iy, ix] = bust(x[ix], y[iy])
    end
end

x, y = np.meshgrid(x, y)
sf = ax[:plot_surface](x, y, z, rstride=4, cstride=4, cmap=cm.coolwarm, linewidth=0.1, antialiased=true)
fig[:colorbar](sf, shrink=0.5, aspect=5)

ax[:set_zlim](-4, 3)
ax[:view_init](0, -90)

@windows? (
begin
    #fp = fm.FontProperties(fname="C:\\WINDOWS\\Fonts\\msgothic.ttc")
    fp = fm.FontProperties(fname="C:\\WINDOWS\\Fonts\\msmincho.ttc")
    plt.title("Julia+Matplotlib サンプル", fontproperties=fp, fontsize=25)
end
: begin
    plt.title("Julia+Matplotlib サンプル", fontsize=25)
end
)

plt.savefig("Oppai2")
plt.show(block=true)
8
8
0

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
8
8