Matlab - graficas con patch

   
Vista:

graficas con patch

Publicado por glorfindel (6 intervenciones) el 31/03/2011 00:45:58
hola nececito graficar un cilindro en matlab usando el comando patch, por medio de triangulos para ubicar las posiciones de los puntos, pero me confundo al dar el aumento en los angulos, por favor si alguien tiene clara la idea ayudeme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

graficas con patch

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 31/03/2011 01:40:30
Seria bueno poner tu avance para ver en donde estas fallando.
Para poder ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por glorfindel (6 intervenciones) el 31/03/2011 08:10:25
grafico el cilindro pero no logro hacer la tapas superior o inferior, aqui esta lo que llevo y no lo entiendo muy bien.
r=input('ingrese el radio del cilindro: ');
h=input('ingrese la altura del cilindro: ');
t=-pi:0.1:pi;
cy=r*sin(t);
cx=r*cos(t);
tcolor(1,1,1:3) = [1 0 0];
for i=1:length(cx)
pause(0.1)
if i<length(cx)
x=[cx(i); cx(i); cx(i+1); cx(i+1)];
y=[cy(i); cy(i); cy(i+1); cy(i+1)];
else
x=[cx(i); cx(i); cx(1); cx(1)];
y=[cy(i); cy(i); cy(1); cy(1)];
end
z=[0; h; h; 0];
grid on
patch(x,y,z,tcolor)
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

graficas con patch

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 31/03/2011 13:11:02
Hola!!!

Necesitas hacer el codigo?

En Matlab existe la función cylinder, que te permite crear cilindros, podrías revizar la documentación help cylinder.

Ejemplo:

cylinder
axis square
h = findobj('Type','surface');
set(h,'CData',rand(size(get(h,'CData'))))

o

t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(2+cos(t));
surf(X,Y,Z)
axis square

Saludos;
Dave
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

graficas con patch

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 01/04/2011 08:53:25
Hola!!.
Acabo de terminar el programa que estas haciendo, nose si quieres de esta manera o de otra forma. He hecho un cilindro con tapas tanto en la parte inferior como en la parte superior.

%el programa cilindro
clear all
close all
r=input('ingrese el radio del cilindro: ');
h=input('ingrese la altura del cilindro: ');
theta=0:pi/30:2*pi; %discretizacion del angulo
Altura=0:0.1:h; %discretizacion de la altura
[t,H]=meshgrid(theta,Altura); % mallado angulo-altura
x=r*cos(t);
y=r*sin(t);
figure(gcf);
surf(x,y,H); %grafica el cilindro
hold on %para que se pueda graficar las 3 gráficas
Radio=0:0.05:r; %discretizacion del radio
[t,R]=meshgrid(theta,Radio); %Mallado angulo-radio
x=R.*cos(t);
y=R.*sin(t);
meshc(x,y,0*y) %grafica la tapa inferior del cilindro
[n,m]=size(x);
Z=h*ones(n,m);
meshc(x,y,Z) %grafica la tapa superior del cilindro

%EJECUCION DEL PROGRAMA
>> cilindro
ingrese el radio del cilindro: 4
ingrese la altura del cilindro: 10

>> cilindro
ingrese el radio del cilindro: 10
ingrese la altura del cilindro: 15


>> cilindro
ingrese el radio del cilindro: 3
ingrese la altura del cilindro: 6


Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por glorfindel (6 intervenciones) el 04/04/2011 02:28:06
ta rebueno tu programa, lo q pasa es q me estan evaluando el comando patch, y debo sacarlo con ese comando precisamente, es un poco dificil he tratado de hacerlo paso por paso y sale, pero cuando tarto de hacerlo por medio de un for para ahorra pasos no se q la pasa al programa q no me da las graficas q yo quiero.
ahorita publico el avance, a ver si alguien se da cuenda de cual es mi error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por glorfindel (6 intervenciones) el 04/04/2011 02:39:22
bueno aqui está la idea de lo q intento hacer, la idea es crear una forma repetitiva q complete el cilindro, se me ha vuelto todo un reto jeje, si alguien tiene una sugerencia la agradezco.

p=pi/180;
patch([0,5*cos(0*p),5*cos(15*p)],[0,5*sin(0*p),5*sin(15*p)],[0,0,0],[1,1,0])
patch([5*cos(0*p),5*cos(0*p),5*cos(15*p),5*cos(15*p)],[5*sin(0*p),5*sin(0*p),5*sin(15*p),5*sin(15*p)],[0,3,3,0],[1,1,0])
patch([0,5*cos(0*p),5*cos(15*p)],[0,5*sin(0*p),5*sin(15*p)],[3,3,3],[1,1,0])
patch([0,5*cos(15*p),5*cos(30*p)],[0,5*sin(15*p),5*sin(30*p)],[0,0,0],[1,1,0])
patch([5*cos(15*p),5*cos(15*p),5*cos(30*p),5*cos(30*p)],[5*sin(15*p),5*sin(15*p),5*sin(30*p),5*sin(30*p)],[0,3,3,0],[1,1,0])
patch([0,5*cos(15*p),5*cos(30*p)],[0,5*sin(15*p),5*sin(30*p)],[3,3,3],[1,1,0])
patch([0,5*cos(30*p),5*cos(45*p)],[0,5*sin(30*p),5*sin(45*p)],[0,0,0],[1,1,0])
patch([5*cos(30*p),5*cos(30*p),5*cos(45*p),5*cos(45*p)],[5*sin(30*p),5*sin(30*p),5*sin(45*p),5*sin(45*p)],[0,3,3,0],[1,1,0])
patch([0,5*cos(30*p),5*cos(45*p)],[0,5*sin(30*p),5*sin(45*p)],[3,3,3],[1,1,0])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmai.com (6 intervenciones) el 04/04/2011 06:30:48
Hola.

Seria muy interesante que lo resolvieras con esa funcion, bueno lo publicas en el foro para ver como lo hicistes.

Saludos: jose Jeremias Caballero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por glorfindel (6 intervenciones) el 05/04/2011 04:16:14
bueno, muchas gracias a todos los q quisieron colaborarme con mi trabajo, al final logré hacerlo, aqui dejo el programa para interes general, un el angulo q usar recomiendo q sean divisores enteros de 360 para q salga mejor jeje(me falta optimizarlo un poco):

p=pi/180;
r=input('ingrese el radio del cilindro: ');
a=input('ingrese el angulo deseado: ');
h=input('ingrese la altura requerida: ');
n=360/a;
for i=0:n;
pause(0.1)
if i==0
grid on
patch([0,r*cos(0*p),r*cos(a*p)],[0,r*sin(0*p),r*sin(a*p)],[0,0,0],[1,1,0])
patch([r*cos(0*p),r*cos(0*p),r*cos(a*p),r*cos(a*p)],[r*sin(0*p),r*sin(0*p),r*sin(a*p),r*sin(a*p)],[0,h,h,0],[1,1,0])
patch([0,r*cos(0*p),r*cos(a*p)],[0,r*sin(0*p),r*sin(a*p)],[h,h,h],[1,1,0])
else
patch([0,r*cos(i*a*p),r*cos((i+1)*a*p)],[0,r*sin(i*a*p),r*sin((i+1)*a*p)],[0,0,0],[1,1,0])
patch([r*cos(i*a*p),r*cos(i*a*p),r*cos((i+1)*a*p),r*cos((i+1)*a*p)],[r*sin(i*a*p),r*sin(i*a*p),r*sin((i+1)*a*p),r*sin((i+1)*a*p)],[0,h,h,0],[1,1,0])
patch([0,r*cos(i*a*p),r*cos((i+1)*a*p)],[0,r*sin(i*a*p),r*sin((i+1)*a*p)],[h,h,h],[1,1,0])
end
view(23,26)
axis([-r-2,r+2,-r-2,r+2,-2,h+2])
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

graficas con patch

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 05/04/2011 05:22:42
Priramente darte las gracias por compartir tu programa. Esta estupendo. Asi aprendemos mas de paquete de Matlab.
Ah tambien hice algunos arreglos a u programa, aqui mando el programa.

clear, clc, close all
r=input('Ingrese el radio del cilindro r:');
a=input('Ingrese el angulo central(sexagesimal) deseado a:');
h=input('Ingrese la altura requerida h:');
figure(gcf)
for i=0:360/a
pause(0.1)
patch([0,r*cosd(i*a),r*cosd((i+1)*a)],[0,r*sind(i*a),r*sind((i+1)*a)],[0,0,0],[1,1,0])
patch([r*cosd(i*a),r*cosd(i*a),r*cosd((i+1)*a),r*cosd((i+1)*a)],...
[r*sind(i*a),r*sind(i*a),r*sind((i+1)*a),r*sind((i+1)*a)],[0,h,h,0],[1,1,0])
patch([0,r*cosd(i*a),r*cosd((i+1)*a)],[0,r*sind(i*a),r*sind((i+1)*a)],[h,h,h],[1,1,0])
view(23,26)
axis([-r-2,r+2,-r-2,r+2,-2,h+2])
end



%LA EJECUCION:
>> cilindropatch2
Ingrese el radio del cilindro r:10
Ingrese el angulo central(sexagesimal) deseado a:10
Ingrese la altura requerida h:100


Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por Cris (1 intervención) el 29/07/2012 20:41:04
Jose Jeremias, ¿cómo se podría mostrar el cilindro en posición horizontal?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

graficas con patch

Publicado por Experto (1 intervención) el 23/08/2012 12:17:20
Utiliza la función rotate, es sencilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar