Mathemarica, Maxima, Grapher, Gnuplot, Octave, Matplotlib
들로 각각 그려보자.
* 윈도우 XP 에서 Mathematica 8 을 이용하여 그리기
* 윈도우 XP 에서 wxMaxima 를 이용하여 그리기
** 명령 입력
** 위의 명령으로 별도의 창에 그려진 곡면
* Mac OS X Lion 에서 Grapher 를 이용하여 그리기
* 윈도우 XP 에서 Gnuplot 을 이용하여 그리기
** Gnuplot 소스
# parametricTorus.dem
set term win
set parametric
set isosamples 80, 30
set hidden
set key below
set title "Parametric Torus"
set urange [0:2*pi]
set vrange [0:2*pi]
set ztics nomirror -2.0, 0.5, 2.0
set view 45,50
a = 5
b = 2
splot (a+ b*cos(v))*cos(u), (a + b*cos(v))*sin(u), b*sin(v)
** Gnuplot 창에 위의 소스를 입력하기
** 위의 명령으로 Gnuplot 이 그려준 곡면
* 윈도우 XP 에서 Octave 3.2.4 를 이용하하여 곡면 그리기
** Octave 소스
b = 2;
fx = @(u, v) (a + b.*cos(v)).*cos(u);
fy = @(u, v) (a + b.*cos(v)).*sin(u);
fz = @(u, v) b.*sin(v);
ezmesh (fx, fy, fz, [-2*pi, 2*pi, -2*pi, 2*pi], 50);
** Octave 실행 창에 명령 입력하기
** 위의 명령으로 Octave 가 그려준 곡면
* Matplotlib 를 이용하여 곡면 그리기
1) 두 가지 색으로 칠하기
** 파이썬 소스
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
U = np.arange(-2*np.pi, 2*np.pi, 0.2)
ulen = len(U)
V = np.arange(-2*np.pi, 2*np.pi, 0.2)
vlen = len(V)
U, V = np.meshgrid(U, V)
a = 5
b = 2
X = (a + b*np.cos(V))*np.cos(U)
Y = (a + b*np.cos(V))*np.sin(U)
Z = np.sin(V)
colortuple = ('y', 'b')
colors = np.empty(X.shape, dtype=str)
for v in range(vlen):
for u in range(ulen):
colors[u, v] = colortuple[(u + v) % len(colortuple)]
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
linewidth=0, antialiased=False)
ax.set_zlim3d(-1, 1)
ax.w_zaxis.set_major_locator(LinearLocator(6))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
plt.show()
** 위의 소스를 실행시켜서 그린 곡면
2) 선으로만 그리기
** 파이썬 소스
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
U = np.arange(-2*np.pi, 2*np.pi, 0.2)
ulen = len(U)
V = np.arange(-2*np.pi, 2*np.pi, 0.2)
vlen = len(V)
U, V = np.meshgrid(U, V)
a = 5
b = 2
X = (a + b*np.cos(V))*np.cos(U)
Y = (a + b*np.cos(V))*np.sin(U)
Z = np.sin(V)
ax.plot_wireframe(X, Y, Z, rstride=3, cstride=3)
plt.show()
** 위의 소스를 실행시켜서 그린 곡면
3) 높이에 따라 다른 색으로 칠하기
** 파이썬 소스
from mpl_toolkits.mplot3d.axes3d import Axes3D
import matplotlib.pyplot as plt
# imports specific to the plots in this example
import numpy as np
from matplotlib import cm
# Twice as wide as it is tall.
fig = plt.figure(figsize=plt.figaspect(0.7))
#---- First subplot
ax = fig.add_subplot(111, projection='3d')
U = np.arange(0, 2*np.pi, 0.1)
V = np.arange(0, 2*np.pi, 0.1)
U, V = np.meshgrid(U, V)
a = 5
b = 2
X = (a + b*np.cos(V))*np.cos(U)
Y = (a + b*np.cos(V))*np.sin(U)
Z = b*np.sin(V)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
ax.set_zlim3d(-2.01, 2.01)
fig.colorbar(surf, shrink=0.5, aspect=10)
plt.show()
** 위의 소스를 실행시켜서 그린 곡면
'학습 > 수학' 카테고리의 다른 글
여러 가지 도구를 이용한 행렬 계산 / 스칼라배. 덧셈, 뻴셈 등 (0) | 2011.09.17 |
---|---|
매개방정식으로 곡면 그리기 / 구면(sphere) (0) | 2011.09.17 |
회전 곡면 z = sin(r) over r 그리기 (0) | 2011.09.16 |
4엽장미 곡선(quadrifolium) 그리기 (0) | 2011.09.16 |
심장형 곡선(cardioid) 그리기 (0) | 2011.09.16 |