визуализировать трехмерную геометрию эритроцитов с помощью Matlab с триангуляцией

Я пытаюсь визуализировать трехмерную геометрию эритроцитов со следующей функцией.

z = (+-)7.82*sqrt(1-4*(x^2+y^2)/(7.82*7.82))*(0.0518 + 2.0026*(x^2+y^2)/(7.82*7.82)-4.491*((x^2+y^2)/(7.82*7.82))^2)

Я хочу случайным образом распределить точку по геометрии, а затем использовать функцию триангуляции для ее визуализации. ниже мой код Matlab, который я написал. Что-то не так с настройкой моих точек. Я не смог получить результат идеи, я думаю, проблема в том, что я не знаю, как выбрать диапазон параметров x, y.

% coefficent defination
D_0 = 7.82;
a_0 = 0.0518;
a_1 = 2.0026;
a_2 = -4.491;
D_0_sq = D_0*D_0;

% number of points to be added
numpts = 100;

% coordination compuation
%thetha = rand(numpts,1)*2*pi;
%phi = rand(numpts,1)*pi;

x = rand(numpts,1);
y = rand(numpts,1);
z = D_0*sqrt(1-4*(x.^2 + y.^2)/D_0_sq).*(a_0 + a_1*(x.^2 + y.^2)/D_0_sq + ...
    (a_2*(x.^2 + y.^2).*(x.^2 + y.^2))/(D_0_sq*D_0_sq));
z_2 = - D_0*sqrt(1-4*(x.^2 + y.^2)/D_0_sq).*(a_0 + a_1*(x.^2 + y.^2)/D_0_sq + ...
    (a_2*(x.^2 + y.^2).*(x.^2 + y.^2))/(D_0_sq*D_0_sq));
%D_0*sqrt(1-4*x_sq_y_sq/D_0_sq)*(a_0 + a_1*x_sq_y_sq/D_0_sq + (a_2*x_sq_y_sq*x_sq_y_sq)/(D_0_sq*D_0_sq));

% triangulation computation
dt = DelaunayTri(x,y,z);
dt_2 = DelaunayTri(x,y,z_2);
[tri Xb] = freeBoundary(dt);
[tri_2 Xb_2] = freeBoundary(dt_2);
% plot geometry
trisurf(tri,Xb(:,1),Xb(:,2),Xb(:,3), 'FaceColor', 'cyan', 'faceAlpha', 0.8);
hold on;
trisurf(tri_2,Xb_2(:,1),Xb_2(:,2),Xb_2(:,3), 'FaceColor', 'cyan', 'faceAlpha', 0.8);

Заранее спасибо!


person Lbj_x    schedule 30.09.2014    source источник
comment
Примечание: вам нужно использовать реальные числа с DelaunayTri. Поэтому используйте z = real(z) и z_2 = real(z_2) перед вычислением dt и dt_2.   -  person Benoit_11    schedule 30.09.2014
comment
Проблема в том, что я не очень понимаю диапазон x и y. Если есть комплексное число, значит, мой диапазон неверен   -  person Lbj_x    schedule 30.09.2014
comment
Если у вас есть sqrt(1-4*(x.^2+y.^2)), то x и y должны быть в пределах круга радиусом 1/2 от начала координат, то есть x.^2+y.^2<=1/4. Могут быть и другие ограничения.   -  person David    schedule 01.10.2014
comment
Проблема в том, что это настоящий номер, @Benoit_11, не могли бы вы просто написать свой комментарий, чтобы ответить, я поставлю вам галочку :)   -  person Lbj_x    schedule 01.10.2014


Ответы (1)


Ну как написано в комментариях, нужно использовать реальные числа при триангуляции Делоне. Так что не забудьте использовать z = real(z) и z_2 = real(z_2) перед этой частью:

% triangulation computation
dt = DelaunayTri(x,y,z);
dt_2 = DelaunayTri(x,y,z_2);
[tri Xb] = freeBoundary(dt);
[tri_2 Xb_2] = freeBoundary(dt_2);
% plot geometry
trisurf(tri,Xb(:,1),Xb(:,2),Xb(:,3), 'FaceColor', 'cyan', 'faceAlpha', 0.8);
hold on;
trisurf(tri_2,Xb_2(:,1),Xb_2(:,2),Xb_2(:,3), 'FaceColor', 'cyan', 'faceAlpha', 0.8);
person Benoit_11    schedule 01.10.2014