对齐MATLAB三角测量的面部数据

时间:2012-02-13 00:19:39

标签: matlab plot triangulation

我有一个函数f(x,y),它具有我想绘制的某些对称性。这是一个例子:

view(2) view(3)

可以使用以下内容生成此图:

[x,y,z] =
     0         0    0.1415
0.1999    0.1999    0.1165
0.2760         0    0.1268
0.3694    0.3694    0.0983
0.4830         0    0.1142
0.5090    0.5090    0.0903
0.5550    0.1871    0.0881
0.6189    0.3558    0.0715
0.6197    0.6197    0.0907
0.6399         0    0.1056
0.7071    0.7071    0.1415
0.7169    0.4835    0.0869
0.7215    0.1200    0.0859
0.7304    0.2392    0.0680
0.7643         0    0.1005
0.7926    0.3574    0.0856
0.8090    0.5878    0.1393
0.8581    0.1122    0.0821
0.8634    0.2343    0.0878
0.8794         0    0.0986
0.8910    0.4540    0.1332
0.9511    0.3090    0.1253
0.9877    0.1564    0.1191
1.0000         0    0.1169

t = 
 6     4     8
12     6     8
 8     4     7
 4     2     7
 8     7    14
14     7    13
 3     2     1
 5     7     3
 3     7     2
17    12    21
 6    12     9
 9    17    11
12    17     9
10    15    13
10     7     5
13     7    10
21    12    16
16    12     8
 8    14    16
18    14    13
15    20    18
13    15    18
24    23    18
18    20    24
21    16    22
23    22    19
19    18    23
14    18    19
19    16    14
19    22    16

trisurf(t,x,y,z)

所以我知道函数关于y = x具有反射对称性,然后在所有象限中重复得到的函数。以下是执行此操作的代码:

allx = [x; x;-x;-x;y; y;-y;-y];
ally = [y;-y; y;-y;x;-x; x;-x];
allz = [z; z; z; z;z; z; z; z];

这些是我想要绘制的曲面的新顶点。现在我该如何为这个新曲面正确生成面?

当我使用更精细的网格并添加一些漂亮的灯光时,它应该看起来像这样: enter image description here

1 个答案:

答案 0 :(得分:2)

投机:

所以你的问题是关于如何设置trisurf的第一个参数,即如何在代码中定义扩展的t。根据{{​​3}},这是由剩余参数定义的顶点的索引。我没有在这台机器上安装MATLAB,但如果你这样做会发生什么:

allx = [x; x;-x;-x];
ally = [y;-y; y;-y];
allz = [z; z; z; z];
s = size(x,1);
t = [t; t + s; t + 2*s; t + 3*s]

试着想一想这是否有意义,以及它是否/如何延伸到其他象限。