Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: generating a facetted surface
Replies: 2   Last Post: Sep 29, 2011 5:02 AM

 Messages: [ Previous | Next ]
 Peter Schreiber Posts: 117 Registered: 2/1/08
generating a facetted surface
Posted: Sep 29, 2011 5:02 AM

Hi Bruno,
Thanks for the note. As you mentioned the definition of u and v was missing.
I would be very curious if anyone has an elegant way of eliminating the interior surfaces that only the outer facetet surface remains.

Thanks a lot,
Peter

Here is the complete code:

clear all
clc
close all
a=8;
b=8;
c=50;
d=200;
nf_uv_grid = 101;
%alpha=0/180*pi;
%beta=0/180*pi;
gamma=0/180*pi;

[u,v]=meshgrid(linspace(0,2*pi,nf_uv_grid),linspace(0,pi,nf_uv_grid));

[s_grid_x,s_grid_y]=meshgrid(linspace(-2,2,3),linspace(-2,2,3));
s_grid_z=0.*s_grid_x;

[r_grid_x,r_grid_y]=meshgrid(linspace(-40,40,3),linspace(-40,40,3));
r_grid_z=0.*r_grid_x+0.5*d;

f=sqrt((r_grid_x-s_grid_x).^2+(r_grid_y-s_grid_y).^2+(r_grid_z-s_grid_z).^2);

c=sqrt(f.^2+a^2);

alpha=atan((r_grid_x-s_grid_x)./(r_grid_z-s_grid_z));
beta=atan((r_grid_y-s_grid_y)./(r_grid_z-s_grid_z));

s_grid_x=s_grid_x';
s_grid_y=s_grid_y';

for i=1:size(c,1)
for j=1:size(c,2)

if (i==((size(c,1)-1)/2+1) && j==((size(c,2)-1)/2)+1) || i==1 || i==size(c,1) || j==1 || j==size(c,2)
x=a.*cos(u).*cos(v);
y=b.*cos(u).*sin(v);
z=c(i,j).*sin(u)+f(i,j);

xv=reshape(x,1,numel(x));
yv=reshape(y,1,numel(y));
zv=reshape(z,1,numel(z));

shift_M=[1 0 0 s_grid_x(i,j);0 1 0 -s_grid_y(i,j); 0 0 1 0; 0 0 0 1];
Rx=[1 0 0 0; 0 cos(alpha(i,j)) -sin(alpha(i,j)) 0;0 sin(alpha(i,j)) cos(alpha(i,j)) 0; 0 0 0 1];
Ry=[cos(beta(i,j)) 0 sin(beta(i,j)) 0; 0 1 0 0; -sin(beta(i,j)) 0 cos(beta(i,j)) 0; 0 0 0 1];
Rz=[cos(gamma) -sin(gamma) 0 0; sin(gamma) cos(gamma) 0 0; 0 0 1 0; 0 0 0 1];

temp=shift_M*Ry*Rx*[xv;yv;zv;ones(size(xv))];

xs=temp(1,:);
ys=temp(2,:);
zs=temp(3,:);

xs2=reshape(xs,nf_uv_grid,nf_uv_grid);
ys2=reshape(ys,nf_uv_grid,nf_uv_grid);
zs2=reshape(zs,nf_uv_grid,nf_uv_grid);

xs2(zs2>20)=NaN;
ys2(zs2>20)=NaN;
zs2(zs2>20)=NaN;

figure(1)
surf(xs2,ys2,zs2)
xlabel('x')
ylabel('y')
zlabel('z')
hold on

else

end
end
end

Date Subject Author
9/28/11 Peter Schreiber
9/29/11 Bruno Luong
9/29/11 Peter Schreiber