Create a hemisphere with slats
1 view (last 30 days)
Show older comments
I would like to draw a hemisphere with slats as attached figures. 12 identical slits created in hemi
sphere, and width slit and width slat are equal.
Accepted Answer
Stephen23
on 2 Sep 2016
Edited: Stephen23
on 2 Sep 2016
There is no need to write ugly, slow code using loops. MATLAB code is much more beautiful than that! This should get you started:
n = 12;
p = 30;
%
tht = linspace(0,pi,1+p).';
ang = linspace(0,pi,2*n);
%
x = cos(tht)*ones(1,2*n);
y = sin(tht)*cos(ang);
z = sin(tht)*sin(ang);
%
V = [x(:),y(:),z(:)];
F = bsxfun(@plus,(1:p).',0:2*(p+1):size(V,1)-1);
F = F(:);
F(:,2:4) = [1+F,F+2+p,F+1+p];
%
patch('Faces',F, 'Vertices',V, 'FaceColor','green', 'EdgeColor','none')
view(3)
Creates this:
3 Comments
More Answers (1)
KSSV
on 1 Sep 2016
clc; clear all ;
R = 1. ;
%
N1 = 100 ;
th1 = linspace(0,pi,N1) ;
x = R*cos(th1) ;
y = R*sin(th1) ;
z = zeros(size(x)) ;
%
N2 = 100 ;
th2 = linspace(0,pi,N2) ;
X = zeros(N1,N2) ;
Y = X ;
Z = X ;
for i = 1:N1
for j = 1:N2
Rot = [1 0 0 ; 0 cos(th2(j)) -sin(th2(j)) ; 0 sin(th2(j)) cos(th2(j))] ;
k = Rot*[x(i) ; y(i) ;z(i)] ;
X(i,j) = k(1) ;
Y(i,j) = k(2) ;
Z(i,j) = k(3) ;
end
end
figure
hold on
count = 0 ;
for i = 1:2:N1
count = count+1 ;
x = [X(:,i) ; flipud(X(:,1+1))] ;
y = [Y(:,i) ; flipud(Y(:,i+1))] ;
z = [Z(:,i) ; flipud(Z(:,1+1))] ;
if mod(count,2)
fill3(x,y,z,'g','edgecolor','none')
else
fill3(x,y,z,'w','edgecolor','none')
end
drawnow
end
4 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!