Düzensiz alan türü sorunları olan başkalarına yardımcı olabilecek bazı düşünceler eklemek için. Kullanıcının üç vektör / listeye (x, y, z) sahip olduğu ve z'nin bir yüzey olarak dikdörtgen bir ızgara üzerine çizileceği bir 2D çözümü temsil ettiği bir durumda, ArtifixR'nin 'plot_trisurf ()' yorumları uygulanabilir. Dikdörtgen olmayan etki alanına sahip benzer bir örnek:
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
# problem parameters
nu = 50; nv = 50
u = np.linspace(0, 2*np.pi, nu,)
v = np.linspace(0, np.pi, nv,)
xx = np.zeros((nu,nv),dtype='d')
yy = np.zeros((nu,nv),dtype='d')
zz = np.zeros((nu,nv),dtype='d')
# populate x,y,z arrays
for i in range(nu):
for j in range(nv):
xx[i,j] = np.sin(v[j])*np.cos(u[i])
yy[i,j] = np.sin(v[j])*np.sin(u[i])
zz[i,j] = np.exp(-4*(xx[i,j]**2 + yy[i,j]**2)) # bell curve
# convert arrays to vectors
x = xx.flatten()
y = yy.flatten()
z = zz.flatten()
# Plot solution surface
fig = plt.figure(figsize=(6,6))
ax = Axes3D(fig)
ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0,
antialiased=False)
ax.set_title(r'trisurf example',fontsize=16, color='k')
ax.view_init(60, 35)
fig.tight_layout()
plt.show()
Yukarıdaki kod şunları üretir:
Bununla birlikte, özellikle sorunun düzensiz bir alanda tanımlandığı durumlarda bu, tüm sorunları çözmeyebilir. Ayrıca, alanın bir veya daha fazla içbükey alana sahip olması durumunda, delaunay üçgenleme, alanın dışında sahte üçgenlerin üretilmesine neden olabilir. Bu gibi durumlarda, doğru yüzey temsilini elde etmek için bu hileli üçgenlerin üçgenlemeden çıkarılması gerekir. Bu durumlar için, kullanıcının, bu üçgenlerin programlı olarak kaldırılabilmesi için delaunay üçgenleme hesaplamasını açıkça dahil etmesi gerekebilir. Bu koşullar altında, aşağıdaki kod önceki çizim kodunun yerini alabilir:
import matplotlib.tri as mtri
import scipy.spatial
# plot final solution
pts = np.vstack([x, y]).T
tess = scipy.spatial.Delaunay(pts) # tessilation
# Create the matplotlib Triangulation object
xx = tess.points[:, 0]
yy = tess.points[:, 1]
tri = tess.vertices # or tess.simplices depending on scipy version
#############################################################
# NOTE: If 2D domain has concave properties one has to
# remove delaunay triangles that are exterior to the domain.
# This operation is problem specific!
# For simple situations create a polygon of the
# domain from boundary nodes and identify triangles
# in 'tri' outside the polygon. Then delete them from
# 'tri'.
# <ADD THE CODE HERE>
#############################################################
triDat = mtri.Triangulation(x=pts[:, 0], y=pts[:, 1], triangles=tri)
# Plot solution surface
fig = plt.figure(figsize=(6,6))
ax = fig.gca(projection='3d')
ax.plot_trisurf(triDat, z, linewidth=0, edgecolor='none',
antialiased=False, cmap=cm.jet)
ax.set_title(r'trisurf with delaunay triangulation',
fontsize=16, color='k')
plt.show()
Örnek grafikler, çözüm 1) sahte üçgenlerle ve 2) bunların kaldırıldığı yerleri gösteren aşağıda verilmiştir:
Umarım yukarıdakiler, çözüm verilerinde içbükey durumları olan kişilere yardımcı olabilir.