memvisualisasikan geometri sel darah merah 3d menggunakan Matlab dengan triangulasi

Saya mencoba memvisualisasikan geometri sel darah merah 3d dengan fungsi berikut.

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)

Saya ingin mendistribusikan titik secara acak pada geometri dan kemudian menggunakan fungsi triangulasi untuk memvisualisasikannya. di bawah ini adalah kode matlab yang saya tulis. Ada yang salah dengan pengaturan poin saya. Saya tidak bisa mendapatkan hasil ide, menurut saya masalahnya adalah saya tidak tahu cara memilih rentang parameter 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);

Terima kasih sebelumnya!


person Lbj_x    schedule 30.09.2014    source sumber
comment
Catatan tambahan: Anda perlu menggunakan bilangan real dengan DelaunayTri. Oleh karena itu gunakan z = real(z) dan z_2 = real(z_2) sebelum menghitung dt dan dt_2.   -  person Benoit_11    schedule 30.09.2014
comment
Masalahnya adalah saya tidak begitu jelas tentang rentang x dan y. Jika ada bilangan kompleks berarti rentang saya salah   -  person Lbj_x    schedule 30.09.2014
comment
Mengingat Anda memiliki sqrt(1-4*(x.^2+y.^2)) maka x dan y keduanya harus berada dalam lingkaran dengan radius 1/2 dari titik asal, yaitu x.^2+y.^2<=1/4. Mungkin ada batasan lain.   -  person David    schedule 01.10.2014
comment
Soalnya bilangan asli, @Benoit_11 bisakah anda memberikan komentar anda untuk menjawabnya, saya akan memberi anda tanda centang :)   -  person Lbj_x    schedule 01.10.2014


Jawaban (1)


Seperti yang tertulis di kolom komentar, Anda perlu menggunakan bilangan real dengan triangulasi Delaunay. Jadi jangan lupa gunakan z = real(z) dan z_2 = real(z_2) sebelum bagian ini:

% 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