从一组点着色三角剖分

时间:2016-06-14 16:09:50

标签: matlab plot triangulation

我有一个包含n行和4列的矩阵。前3列表示点的x,y,z位置。最后一列表示该点的颜色值“p”。

有没有办法用'p'定义的每个三角形表面的颜色绘制这些点的三角剖分?或者也许是由创建特定三角形表面的'p'值的平均值定义的颜色?

我已尝试过文档中的一些选项,但无济于事。

我的尝试:

interiorPoints = [matrix(:,1),matrix(:,2),matrix(:,3)];
DT = DelaunayTri(interiorPoints); 
hullFacets = convexHull(DT);
c=matrix(:,4);
trisurf(hullFacets,DT.X(:,1),DT.X(:,2),DT.X(:,3),c)

但是我收到了一个错误:

  

警告:创建或更新Patch

时出错      

属性FaceVertexCData

的值出错      

颜色数必须等于顶点或面的数量

1 个答案:

答案 0 :(得分:1)

为什么trisurf(x,y,z,c)方法不起作用

您无法使用trisurf(x,y,z,c)方法,因为c必须与您的Triangulation矩阵的长度相同,但它不会。这是因为您不会从矩阵中生成相同数量的三角形面,因为矩阵中有点。

值得一提的是,我们不推荐使用MATLAB DelaunayTri()函数(在the documentation中这样说)。相反,你应该使用MATLAB' delaunayTriangulation() function

着色三角形表面的工作方法

下面,我详细/评论了一段代码,它会根据interiorPoints变量第4列中存储的颜色值为从matrix变量绘制的三角形曲面着色。

在这段代码中,我将颜色值映射到不同的蓝色阴影,并将颜色值映射到MATLAB的jet颜色映射。如果您愿意,可以在matrix变量中创建第5和第6列,以便指定RGB颜色组件,以获得更鲜明的色彩映射:

interiorPoints = [matrix(:,1),matrix(:,2),matrix(:,3)];
c=matrix(:,4);

% MATLAB recommends that you use delaunayTriangle...
% DT = DelaunayTri(interiorPoints); 

DT = delaunayTriangulation(x,y,z)
hullFacets = convexHull(DT)

% Create an empty RGB colormap
custom_cm = zeros(length(c),3);
% Or, instead of creating an empty color map, you could modify one of MATLAB's available color maps
modify_cm = colormap(jet) % Replace 'jet' with any other of MATLAB's available color maps 

% "B" is the 3rd component of this RGB color map
custom_cm(:,3) = ((c-min(c))/(max(c)-min(c))*length(c)) / length(c)

% Expand the scaled custom_cm column for multiplication with the original color matrix
cm_multiplier = repmat(custom_cm(:,3), 1, 3);
% Multiply element-wise the expanded custom_cm with the original color matrix
modify_cm = cm_multiplier.*modify_cm;

trisurf(hullFacets, DT.Points(:,1), DT.Points(:,2), DT.Points(:,3))

% Use the entirely custom color mapping
colormap(custom_cm)

% Or, use the modified color mapping
colormap(modify_cm)

我没有将数据存储在您的matrix变量中,因此我对一些示例数据进行了三角测量,并根据我作为第4列生成的随机数据集对其进行着色。以下是使用完全自定义颜色贴图的结果:

Sample plot of Delaunay triangulation, colored according to custom color map

以下是使用修改后的jet颜色贴图查看的结果: Sample plot of Delaunay triangulation, colored according to modified <code>jet</code> color map

我希望这有帮助,快乐编码!