Выравнивание данных лица из триангуляции MATLAB - PullRequest
1 голос
/ 13 февраля 2012

У меня есть функция 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 Ответ

2 голосов
/ 13 февраля 2012

Спекулятивный:

Итак, ваш вопрос о том, как установить первый аргумент trisurf, т.е. как определить расширенный t в вашем коде.Согласно docs это индекс в вершинах, определенных оставшимися аргументами.У меня нет 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]

Просто пытаюсь подумать, имеет ли это смысл, и если / как он распространяется на другие сектора.

...