我在笛卡尔坐标X,Y,Z中有一组3D点。对于每个这样的点,我关联存储在向量C中的值。我希望能够用由C给出的颜色对由X,Y,Z给出的表面着色。或者,如果可能的话,我想关联到每个从有限数量的给定颜色中指出颜色。在Matlab中,这可以使用surf(X,Y,Z,C),但X,Y必须是网格形式(由meshgrid生成),而不是一般形式,就像我的情况一样。
我设法在球体的情况下这样做,但是程序并不漂亮,并且它大量使用了球体的参数化。这是我想要做的一个例子(在球体的情况下)。
有没有办法在Matlab中进行这种类型的表面着色? (如果有帮助的话,我还可以提供除了X,Y,Z点之外的曲面三角剖分)
是否有另一款软件可以做类似的事情,并且可以用某种方式与Matlab接口?
答案 0 :(得分:1)
我的基础是Matlab's Representing Data as a Surface。这有用吗?
xlin = linspace(min(x),max(x),33);
ylin = linspace(min(y),max(y),33);
[X,Y] = meshgrid(xlin,ylin);
f = scatteredInterpolant(x,y,z);
Z = f(X,Y);
g = scatteredInterpolant(x,y,c);
C = g(X,Y);
surf(X, Y, Z, C)
答案 1 :(得分:0)
感谢Ander Biguri建议补丁。这就是我提出的,似乎工作得很好。
function patch_color_plot(struc)
% struc is a structure containing at least the following:
% points - the coordinate of the points in a 3xN matrix
% t - the triangulation matrix
% x_0s - the point values
fac = struc.t;
vert = struc.points;
fvc = struc.x_0s;
p = patch('Faces',fac,'Vertices',vert,'FaceVertexCData',...
fvc,'FaceColor','interp');
set(p,'EdgeColor','none')
axis equal
axis off`
以下是一个示例结果:
另一个带圆环的人:
这是另一个例子: