เห็นภาพเรขาคณิตของเซลล์เม็ดเลือดแดง 3 มิติโดยใช้ Matlab พร้อมรูปสามเหลี่ยม

ฉันกำลังพยายามแสดงภาพเรขาคณิต 3 มิติของเซลล์เม็ดเลือดแดงด้วยฟังก์ชันต่อไปนี้

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