我試圖根據Mayavi的Y值對只有角落已知的曲面着色。原來,我成功地用matplotlib(here)做了同樣的事情,但我把這個規範放回到我的真實數據中,渲染不夠充分,因此我現在正在嘗試與Mayavi。我發現Surface from irregular data example這個例子非常有幫助。但是,當應用於我的案例時,在這個簡單案例中再現了這個問題,如下圖左側所示,三角形會出錯,其中右側表面有兩個下三角形,而不是上三角形和下三角形。Mayavi自動三角網錯誤着色僅着眼於其角落的表面
我弄清楚,它從第二Y型頂點的位置來了,但是我想找到1更通用的解決方案)來避免這種不法行爲三角測量和2)有一個更光滑的表面在每個角之間進行插值,就像在我的previous post中一樣,並儘可能避免在右側表面上看到的摺疊,這是因爲我的表面僅在兩個三角形中分裂。任何關於如何與Mayavi一起做的想法?
這裏是我用來生成這個簡單的例子代碼:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import numpy
from mayavi import mlab
X1 = numpy.array([0, 0, 1, 1])
Y1 = numpy.array([0.5, 0.75, 1, 0.5])
Z1 = numpy.array([0, 1, 0.5,0])
X2 = numpy.array([0, 0, 1, 1])
Y2 = numpy.array([-0.5, -0.45, -1, -0.5])
Z2 = numpy.array([0, 1, 0.5,0])
fig = mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5))
# Building the working triangulation
# Define the points in 3D space
# including color code based on Z coordinate.
pts = mlab.points3d(X1, Y1, Z1, Y1, colormap='jet')
# Triangulate based on X, Y with Delaunay 2D algorithm.
# Save resulting triangulation.
mesh = mlab.pipeline.delaunay2d(pts)
# Remove the point representation from the plot
pts.remove()
# Draw a surface based on the triangulation
surf = mlab.pipeline.surface(mesh, colormap='jet')
# Building the buggus triangulation
pts = mlab.points3d(X2, Y2, Z2, Y2, colormap='jet')
# Triangulate based on X, Y with Delaunay 2D algorithm.
# Save resulting triangulation.
mesh = mlab.pipeline.delaunay2d(pts)
# Remove the point representation from the plot
pts.remove()
# Draw a surface based on the triangulation
surf = mlab.pipeline.surface(mesh, colormap='jet')
# Simple plot.
mlab.outline(extent=(0,1,-1,1,0,1))
mlab.axes(extent=(0,1,-1,1,0,1), nb_labels=3)
mlab.show()
你期望第二組點的三角剖分是多少? – lrineau
與鏡子相同......一個下部和一個上部三角形,而不是兩個下部三角形 – TazgerO
上次編輯後,問題以「4I」開始,而不是「I」開始。我無法修改該錯字,因爲修改太短。 – lrineau