Create a hemisphere with slats

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.

2 comentarios

José-Luis
José-Luis el 1 de Sept. de 2016
doc patch
viet le
viet le el 2 de Sept. de 2016
could you explain more detail, plz?

Iniciar sesión para comentar.

 Respuesta aceptada

Stephen23
Stephen23 el 2 de Sept. de 2016
Editada: Stephen23 el 2 de Sept. de 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 comentarios

viet le
viet le el 2 de Sept. de 2016
Editada: viet le el 2 de Sept. de 2016
thanks. it is useful and simple.
KSSV
KSSV el 2 de Sept. de 2016
Editada: KSSV el 2 de Sept. de 2016
Good one...I had lot to learn from the code...!
Stephen23
Stephen23 el 2 de Sept. de 2016
Editada: Stephen23 el 2 de Sept. de 2016
@viet le: I hope that you find my code useful. if my answer resolved your question, then please accept it by clicking the accept button

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 1 de Sept. de 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 comentarios

viet le
viet le el 2 de Sept. de 2016
Editada: viet le el 2 de Sept. de 2016
thank.but do you think this figure is wrong.
KSSV
KSSV el 2 de Sept. de 2016
Yes there is a problem with the filling color thing..it needs fine tune.
KSSV
KSSV el 2 de Sept. de 2016
A small correction:
change the loop for i = 1:2:N1 to for i = 1:N1-1.
viet le
viet le el 2 de Sept. de 2016
thank. it is very helpful.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating, Deleting, and Querying Graphics Objects en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 1 de Sept. de 2016

Editada:

el 2 de Sept. de 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by