Cylinder animation
Show older comments
Hi,I have a question about how to mesh a circular column based on experiment data. Now I can mesh the upper circle and lower circle, but I don't know how to mesh the cylinder part. Anybody can help? Here is my code:
clear;
data = load('F:\Experimental Data\110915\0909_01hz_alpha_01.txt');
u = size(data(9,:));
r0 = 500;
m = 10000;
for i=2000:10:m;
act1 = data(9,i)*4.5e-3;
act2 = data(10,i)*4.5e-3;
act3 = data(11,i)*4.5e-3;
P0 = [0 315 act1];
P1 = [272.8 -157.5 act2];
P2 = [-272.8 -157.5 act3];
O = [1/3*(P0(1) + P1(1) + P2(1)) 1/3*(P0(2) + P1(2) + P2(2)) 1/3*(P0(3) + P1(3) + P2(3))];
%set the vector
b = 1/2*[(P1-P0)+(P2-P0)];
c = P2-P1;
t = linspace(0,2*pi,36);
r = linspace(0,r0,30);
[T,R] = meshgrid(t,r);
%set unit vector
b = b/norm(b); c = c/norm(c);
n = cross(b,c);
%draw upper disk
X = O(1) + R.*cos(T)*b(1) + R.*sin(T)*c(1);
Y = O(2) + R.*cos(T)*b(2) + R.*sin(T)*c(2);
Z1 = O(3) + R.*cos(T)*b(3) + R.*sin(T)*c(3);
mesh(X,Y,Z1);
hold on;
%draw lower disk
Z2 = Z1 + 0.01;
mesh(X,Y,Z2);
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%draw cylinder
theta=linspace(0,2*pi,36);
x=500*sin(theta);
y=500*cos(theta);
z=linspace(0,0.01,36);
xx=meshgrid(x);
yy=meshgrid(y);
zz=[meshgrid(z)+O(3)]';
h=mesh(xx,yy,zz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hold off;
axis([-500 500 -500 500 -0.05 0.05]);
getframe;
title('Cylinder Movement Animation','FontSize',20);
xlabel('x [mm]');
ylabel('y [mm]');
zlabel('z [mm]');
end
Anybody can modify "draw cylinder" part of my code, just using one mesh command and transpose matrix. Thanks!
Answers (1)
Zhe Yang
on 1 Nov 2011
0 votes
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!