Create a hemisphere with slats

1 Ansicht (letzte 30 Tage)
viet le
viet le am 1 Sep. 2016
Bearbeitet: Stephen23 am 2 Sep. 2016
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 Kommentare
José-Luis
José-Luis am 1 Sep. 2016
viet le
viet le am 2 Sep. 2016
could you explain more detail, plz?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 2 Sep. 2016
Bearbeitet: Stephen23 am 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 Kommentare
KSSV
KSSV am 2 Sep. 2016
Bearbeitet: KSSV am 2 Sep. 2016
Good one...I had lot to learn from the code...!
Stephen23
Stephen23 am 2 Sep. 2016
Bearbeitet: Stephen23 am 2 Sep. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 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 Kommentare
KSSV
KSSV am 2 Sep. 2016
A small correction:
change the loop for i = 1:2:N1 to for i = 1:N1-1.
viet le
viet le am 2 Sep. 2016
thank. it is very helpful.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Creating, Deleting, and Querying Graphics Objects finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by