Matlab - Ayuda con movimiento de una figura

   
Vista:

Ayuda con movimiento de una figura

Publicado por neno (1 intervención) el 03/07/2009 00:58:25
Hola, soy algo novatillo con Matlab y para empezar poco a poco nos van mandando cosas sencillas. Ahora la cosa se me complicó un poco y tengo que realizar un movimiento sobre una figura creada. En este caso se realiza una simetría ortogonal respecto a un plano dado que creamos mediante 3 puntos en xyz.

El código que crea la figura es el siguiente:

z=0:0.05:pi;
[x,y,z]=cylinder(1-sin(z));
surf(-x,-y,-z)

Sencilla, un cilindro con alguna deformidad para que tenga otra forma distinta. A continuación en las pistas nos dijeron que debemos aplicar la simetría, es decir ejecutar el fichero .m pasándole 3 puntos creados para crear el plano. El código es este:

function t=simetria(p1,p2,p3)
%Forma de uso
u=p2-p1;
v=p3-p1;
w=cross(u,v);
%en la base {u, v, w} la matriz es
A=[1 0 0;0 1 0;0 0 -1];
%Cambio de base
P=[u(1), v(1), w(1); u(2), v(3), w(3); u(3), v(3), w(3)];
Anueva=P*A*inv(P);
%Bnueva=pfijo-p*a*p^-1*fijo
Bnueva=transpose(p1)-P*A*inv(P)*transpose(p1);
t=[Anueva Bnueva];
t(4,1)=0;
t(4,2)=0;
t(4,3)=0;
t(4,4)=1;

Una vez hecho, creado el plano sobre el cual la aplicaremos, debemos ejecutar lo siguiente:

function [X,Y,Z]=aplica2(t,x,y,z)
%Forma de uso: [X,Y,Z]=aplica2(t,x,y,z)
%Aplica transformacion 't' a todos los puntos

for i=1:size(x,1),
for j=1:size(x,2),
[X(i,j),Y(i,j),Z(i,j)]=aplicap(t,x(i,j),y(i,j),z(i,j));
end
end

Siendo el fichero aplicap.m que llama desde este mismo el siguiente:

function [X,Y,Z]=aplicap(t,x,y,z)
%Forma de uso: [X,Y,Z]=aplicap(t,x,y,z)
%Aplica transformacion 't' al punto (x,y,z)

p=t*[x;y;z;1];
X=p(1);
Y=p(2);
Z=p(3);

A continuación deberíamos ejecutar la figura de nuevo y se supone que deberían salir en las gráficas los dos dibujos (poner hold on antes).

Pues bien, al ejecutar el aplica2 me da error, lo que hago es lo siguiente, no sé si es correcto, si se llama de otra forma o que...

[X,Y,Z]=aplica2(simetria(p1, p2, p3, x, y, z)

Alguien me puede ayudar y ayudarme con como poder ejecutarlo de manera correcta???

Gracias!
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