Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 - Graficas 3D Parte 2 Estud 2017B
6 - Graficas 3D Parte 2 Estud 2017B
De manera similar que en el plano, una curva en el espacio puede definirse mediante
sus ecuaciones paramétricas, (x(t), y(t), z(t)), donde t varía en un intervalo y las
coordenadas (x,y,z) están en función de t.
En 3D, una recta que pase por el punto (x0, y0, z0) y que tenga la dirección dada por
un vector v = (v1, v2, v3), puede ser expresada mediante las siguientes ecuaciones
paramétricas:
x = x0 + t v1
y = y0 + t v2
z= z0 + t v3
Ejemplo: las ecuaciones paramétricas de una recta que pasa por el punto (0, -2,-1) y
tiene la dirección del vector (3,2, -1) serán:
x = 0 + 3* t
y = -2 -2*t
z= -1 - t
t=-1:.01:1;
p=[0,-2,-1];
v=[3,2,-1];
x=p(1)+t*v(1);
y=p(2)+t*v(2);
z=p(3)+t*v(3);
plot3(x,y,z)
xlabel('eje x')
ylabel('eje y')
zlabel('eje z')
grid on
t = linspace(0,2*pi,256);
x = 3*cos(t)+cos(10*t).*cos(t);
y = 3*sin(t)+cos(10*t).*sin(t);
z = sin(10*t);
plot3(x,y,z);
DEBER N°19
DEBER: Implementar una animación de manera que una partícula a) siga
la curva anterior y b) vaya por el centro.
Resultados:
(Videos guardados en la carpeta de Deberes(Montero_Lopez)).
DEBER N°20
Implementar animaciones de manera que una esfera vaya: a) siguiendo
las curvas 3D marcadas con verde y b) por el centro de dichas curvas.
http://simetria.dim.uchile.cl/matematico/contenidos.html
3.1.- Hélices.
3.1.1.- Cilíndricas.
3.1.2.- Cónicas.
Para este caso, como las animaciones comienzan desde una posición en z diferente
de uno en donde se encuentra la altura del cono, se crean dos variables ‘m’ y ‘n’ que
comienzan en uno y van variando ‘m+1’ y ‘n+1’ respectivamente, esto solamente con
el fin de usar estas variables para la creación de los videos de ambas animaciones.
Resultados:
3.1.3.- Esféricas.
Resultados:
(Videos guardados en la carpeta de Deberes(Montero_Lopez)).
Para la creación de esta trayectoria fue necesario el uso de las funciones ‘jacobiSN’ y
‘jacobiCn’ las cuales representan las funciones elípticas de Jacobi de seno y coseno.
Otra función usada fue ‘pol2cart’ la cuál, permite cambiar las coordenada polares a
cartesianas. Otra añadidura al código se explica en los comentarios.
surf(r*a+x(i),r*b+y(i),r*c+z(i))
;
axis ([-1 1 -1 1 -1 1.5])
axis ([-1 1 -1 1 -1 1]) xlabel('Eje x');
xlabel('Eje x'); ylabel('Eje y');
ylabel('Eje y'); zlabel('Eje z');
zlabel('Eje z'); title('b) Partícula por el
title('a) Partícula centro de la figura');
siguiendo la curva');
pause(0.05)
pause(0.05) N(j)=getframe;
M(i)=getframe; end
end
%% CREACIÓN DEL VIDEO
%% CREACIÓN DEL VIDEO Video_1=VideoWriter('Esféricas
Video=VideoWriter('Esféricas de de Steiffert literal b.avi');
Steiffert literal a.avi'); open(Video_1);
open(Video); writeVideo(Video_1,N);
writeVideo(Video,M); close(Video_1);
close(Video);
Resultados:
Resultados:
HÉLICE CILÍNDRICA
Es por esta razón que las ardillas que persiguen un otro ascendente y alrededor de
troncos del árbol siguen las trayectorias helicoidales. Las hélices pueden ser levógiras
(bobinas giran a la izquierda) y dextrógiras (bobinas que giran a la derecha). Los
tornillos, las tuercas, y los pernos estándares son todos derechos, al igual que ambas
hélices en una molécula doble-hebrada de DNA (Gardner 1984, pp. 2-3). Las
estructuras helicoidales numerosas en animales (por ejemplo, en sus cuernos)
aparecen generalmente en ambas formas de la imagen especular Gardner (1984)
contiene una discusión fascinante de hélices en plantas y animales, incluyendo una
alusión al sueño de la noche del pleno verano de Shakespeare.
Para crear una hélice, x e y deben describir una circunferencia en el plano xy y por
otro lado z debe incrementarse linealmente hasta una altura k*t. De esta manera, si
r es el radio, sus ecuaciones paramétricas serán:
x = r cos(t)
y = r sin(t)
z = k*t
HÉLICE CÓNICA:
http://www.edificacion.upm.es/geometria/JPA/Heliconpc.html
https://es.wikipedia.org/wiki/H%C3%A9lice_(geometr%C3%ADa)
https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_param%C3%A9trica
ESPIRAL INVERTIDA:
ESPIRAL ESFÉRICA
Hélice Esférica. Se denomina Hélice Esférica a toda Hélice contenida en una Esfera.
Es la curva que corta a los meridianos de una esfera con un Ángulo constante
La curva esférica tomada por una nave que viaja del Polo Sur al Polo Norte de una
esfera mientras que guarda (pero no de la derecha) un ángulo fijo con respecto a los
meridianos. La curva tiene un número infinito de lazos puesto que la separación de
revoluciones consecutivas consigue una cercanía más pequeña y más pequeño los
polos. Esta curva está dada por las ecuaciones paramétricas
Es una curva del espacio que consiste en una espiral enrollada alrededor de una
hélice.
3. 2.- Helicoides.
3.2.1.- Circulares.
3.2.2.- Elípticos.
3.2.3.- Hiperbólicos.
3.2.4.- Concha marina.
HELICOIDE CIRCULAR
Ecuaciones paramétricas:
x=u.*cos(v);
y=u.*sin(v);
z=c*v;
siendo u y v limitada por una malla
HELICOIDE ELÍPTICA
donde es la torsión
CONCHA MARINA
HÉLICO-ESPIRAL
Para la resolución de este ejercicio necesitamos un vi con el que formaremos
una malla, luego definimos las constantes a,b,c y n que necesitamos para el
x,y,z que luego graficaremos ayudándonos de un surf.
Ha habido numerosos adelantos en el modelamiento de las caracolas desde
los primeros trabajos de Raup. En los métodos modernos, el modelamiento de
la superficie de la caracola comienza con la construcción de una hélico-espiral
logarítmica (equiangular).
x=((1-v./2*pi).*(1+cos(u))+c).*(cos(n.*v));
y=((1-v./2*pi).*(1+cos(u))+c).*(sin(n.*v));
z=(b.*v)./(2*pi)+a*sin(u).*(1-v./2*pi);
Ejemplo 1:
Ejemplo 2
clc, clear all, close all
Ejemplo 1
Ejemplo 2
DEBER N°21
Verdadero movimiento:
https://www.youtube.com/watch?v=uObhbBSRxrE
Pero nosotros solo supondremos que el sistema solar está estático pero
que los planetas van por trayectorias con inclinación respecto del
ecuador del Sol:
https://www.youtube.com/watch?v=YD4dol6JM_0
EXPLICACIÓN:
Partes importantes y conceptos nuevos dentro del programa:
o Condiciones iniciales: Antes de comenzar la simulación hay que establecer en qué
estado comienza nuestro sistema de una sola partícula. Eso se conoce como
condición inicial. En este punto se da el valor inicial a las variables de estado
(posición y velocidad). Yo he elegido para el ejemplo que la posición inicial sea el
origen [0;0] y que tenga un poco de velocidad horizontal y mucha vertical [0.1;4],
para ver un bonito tiro parabólico. Por supuesto estos valores pueden ser los que
uno quiera. Invito al lector a jugar con estos valores para ver los diferentes
movimientos posibles en un tiro parabólico.
o Plot3() : Dibuja la posición actual de la partícula. La simulación del movimiento de la
partícula se consigue porque se redibuja continuamente la partícula, eliminando
cada vez el gráfico de la posición anterior y dibujando el de la posición siguiente. Es
como si pusiéramos los fotogramas de una película uno detrás de otro. La función
‘plot’ puede dibujar gráficas si se le da vectores, o puntos si se le da las
coordenadas. Se escogido dibujar el punto como un círculo azul (‘ob’), pero pueden
escogerse otros símbolos y colores.
o pause(): Esta función es importante. Como el ordenador ejecuta el programa muy
deprisa, no es posible ver las gráficas si no pausamos el programa durante un
tiempo en cada iteración. El valor puede escogerse según la velocidad de nuestro
ordenador y lo rápido que queramos ver la simulación. En el ejemplo se hace una
pausa de 0.01 segundos.
En esta ocasión, se puede ver cómo hacer una simulación donde la fuerza sobre la partícula dependa de
la posición de esta. En general, recordemos, la fuerza puede depender de las dos variables de estado del
sistema: posición y velocidad. De nuevo en este ejemplo se usará un sistema con una sola partícula, y
también en el plano (3D). Para la realización de este código resulta muy complicado utilizar, las
ecuaciones de estado discretas, Así que se emplea, ecuaciones paramétricas de una circunferencia para
realizar las trayectorias inclinadas en el espacio.
En realidad, según dicta la Ley de la gravitación universal, dos cuerpos con masa se ejercen una fuerza
entre sí (del mismo valor y sentido opuesto) que depende del cuadrado la distancia (d 12) entre sus centros
de masas y de la masa (m1 y m2) de cada cuerpo [1].
La fuerza que ejerce la partícula 2 sobre la 1, como se ve en la imagen, es un vector (la flecha roja) que
tiene la dirección de la recta que une los dos puntos (la misma que el vector distancia, flecha gris), con el
sentido hacia la otra partícula (la gravedad no repele, sino atrae), y su módulo calculado según la Ley de
Gravitación Universal que aparece en la imagen. Es fácil comprobar qué si calculamos la fuerza que hace
la partícula 1 sobre la 2, será el mismo vector, pero de sentido opuesto (porque ahora el vector distancia
será el opuesto) y de exactamente el mismo módulo. La G es una constante de la física que vale 6.67·10 -
11
N·m2/kg2.
NOTA IMPORTANTE: En la simulación el movimiento de una sola partícula, y por lo tanto también solo la
fuerza sobre esa partícula. En un caso más realista habría que considerar el movimiento de las dos
partículas. De todas formas, en las simulaciones la masa de la “partícula estática” considerada es muchas
veces mayor que la partícula “dinámica”, por lo que el efecto producido sobre ella es menospreciable.
o hold on/ hold off: Estas funciones permiten mantener un dibujo en una figura cada vez que
se genere uno nuevo (hold on), o dejar de mantener el dibujo existente provocando que el
nuevo lo borre (hold off). Se ha utilizado para poder dibujar las dos partículas sin que el
dibujo de la segunda borre el de la primera.
o Scatter3(): Otra diferencia con respecto al programa anterior es que en lugar de
utilizar plot() para dibujar se ha utilizado esta nueva función. El motivo es que con esta
función pueden editarse mejor la creación de puntos (distintos colores, tamaños, relleno de
color…). Las opciones elegidas para esta simulación han sido pintar los dos puntos de negro
y hacer que sean puntos con relleno.
GENERALIDADES
La declaración de variables es exactamente igual a la del programa anterior, la diferencia radica
es que ahora se hace las declaraciones de estas para cada uno de los cuerpos (Los 9 planetas
del sistema solar), las magnitudes principales del sol y los 9 planetas como: masa, radio,
velocidad inicial, posición inicial, fuerza gravitacional respecto del sol, están a una escala
muchísimo más pequeña.
DATOS IMPORTANTES
Para dar un mejor aspecto visual se ha implementado la función whitebg('black'),
la cual permite cambiar el color de fondo de la animación, en este caso negro.
Se realiza por separado la animación del punto que representa al planeta y su trayectoria, ya que
mediante la función ‘scatter’ es más fácil conseguir las características a escala del planeta solicitadas
como: masa, tamaño, etc.
clc, clear all, close all; t=(0:0.05:10*pi);
%Este programa podria realizarse mercurio =(t);
mediante el uso de ecuaciones de theta=0*pi;
estado r_mercurio=(20);
%discretas pero esto resultaria [x_mercurio,y_mercurio,z_mercuri
tedioso, y el tiempo en compilar o]=sph2cart(theta,mercurio,r_mer
sería curio);%Paso a rectanculares
%demasiado. POr ello se hace uso
de ecuaciones parametricas que %VENUS
permitan t=(0:0.04:10*pi);
%ubicar la trayectoria de cada venus=(t);
planeta de manera facil y theta=0.1*pi;
repetitiva. r_venus=(35);
[x_venus,y_venus,z_venus]=sph2ca
rt(theta,venus,r_venus);%Paso a
% Ingresamos los parametros que rectanculares
generarán las o´rbitas de cada
planeta %TIERRA
t=(0:0.03:10*pi);
%MERCURIO tierra=(t);
theta=0.2*pi;
r_tierra=(45); % Realizamos la graficación y
[x_tierra,y_tierra,z_tierra]=sph posterior animación de cada
2cart(theta,tierra,r_tierra); planeta para así
%Paso a rectanculares % formar el sistema solar
for i=1:2500
%MARTE whitebg('black');
t=(0:0.02:10*pi); hold off
marte=(t);
theta=0.3*pi; %En esta primera gráfica el sol
r_marte=(55); se mostrará estático durante
[x_marte,y_marte,z_marte]=sph2ca toda la
rt(theta,marte,r_marte);%Paso a %animación
rectanculares scatter3(0,0,0,500,'filled','yel
low');
%JUPITER title('SISTEMA SOLAR EN 3D')
t=(0:0.015:10*pi); xlabel('Eje x')
jupiter=(t); ylabel('Eje y')
theta=0.4*pi; zlabel('Eje z')
r_jupiter=(70); axis([-110 110,-110 110,-110
[x_jupiter,y_jupiter,z_jupiter]= 110]);
sph2cart(theta,jupiter,r_jupiter grid on
);%Paso a rectanculares hold on
https://www.youtube.com/watch?v=u85-yX-ox4Y
Explicación:
Para la realización de este código se toma como base una trayectoria de varias hélices cónicas,
a través de las cuáles se visualizan varias esferas que asemejan el movimiento de un tornado.
1. Generalidades:
o Sphere: Función utilizada para generar esferas de cierto tamaño. Para crear
muchas de estas, se tiene que crear varios surf que muestren la esfera y vayan
apareciendo en diferentes lugares de forma ordenada.
o Plot3: Permite crear esferas estáticas, las cuales evitarán que la gráfica vaya
desapareciendo conforme vaya pasando el tiempo.
El resultado de la animación fue exitoso, pero lamentablemente, el tiempo de compilación era
demasiado grande, ya que para terminar el proceso se demoraba alrededor de 3 o 4 horas.
Debido a esto no se consiguió un video completo de la animación por falta de tiempo. Sin
embargo, se puede copiar el código y comprobar su funcionalidad.
clc; clear all,close all; ry(p)=y(j); %primera
trayectoria de regreso en y
h=10; %altura del cono. Esto rz(p)=z(j); %primera
valor ayudará a definir el axis. trayectoria de regreso en z
a=2; %control de vueltas
t = linspace(0,15*pi,100); rx_1(p)=x_1(j); %segunda
z=t; trayectria de regreso en x
x=((h-z)./h)*a.*cos(a.*t); ry_1(p)=y_1(j); %segunda
y=((h-z)./h)*a.*sin(a.*t); trayectoria de regreso en y
rz_1(p)=z_1(j); %segunda
a=4; trayectoria de regreso en z
z_1=t;
x_1=((h-z)./h)*a.*cos(a.*t); rx_2(p)=x_2(j); %tercera
y_1=((h-z)./h)*a.*sin(a.*t); trayectria de regreso en x
ry_2(p)=y_2(j); %tercera
a=6; trayectoria de regreso en y
z_2=t; rz_2(p)=z_2(j); %tercera
x_2=((h-z)./h)*a.*cos(a.*t); trayectoria de regreso en z
y_2=((h-z)./h)*a.*sin(a.*t);
rx_3(p)=x_3(j); %cuarta
a=8; trayectria de regreso en x
z_3=t; ry_3(p)=y_3(j); %cuarta
x_3=((h-z)./h)*a.*cos(a.*t); trayectoria de regreso en y
y_3=((h-z)./h)*a.*sin(a.*t); rz_3(p)=z_3(j); %cuarta
trayectoria de regreso en z
a=10;
z_4=t; rx_4(p)=x_4(j); %quinta
x_4=((h-z)./h)*a.*cos(a.*t); trayectria de regreso en x
y_4=((h-z)./h)*a.*sin(a.*t); ry_4(p)=y_4(j); %quinta
trayectoria de regreso en y
p=1; rz_4(p)=z_4(j); %quinta
for j=length(x):-1:1 trayectoria de regreso en z
rx(p)=x(j); %primera
trayectria de regreso en x p=p+1;
end ...esfera o el radio
deseado y para cambiar su
X=[x' rx']; posición se suma la
Y=[y' ry']; ...posición deseada a cada
Z=[z' rz']; coordenada.
hold on
X_1=[x_1' rx_1'];
Y_1=[y_1' ry_1']; surf(r*a+X(i,w),r*b+Y(i,w),r*c+Z
Z_1=[z_1' rz_1']; (i,w));
surf(r*a+X(i-1,w),r*b+Y(i-
X_2=[x_2' rx_2']; 1,w),r*c+Z(i-1,w));
Y_2=[y_2' ry_2']; surf(r*a+X(i-2,w),r*b+Y(i-
Z_2=[z_2' rz_2']; 2,w),r*c+Z(i-2,w));
surf(r*a+X(i-3,w),r*b+Y(i-
3,w),r*c+Z(i-3,w));
X_3=[x_3' rx_3']; surf(r*a+X(i-4,w),r*b+Y(i-
Y_3=[y_3' ry_3'];
4,w),r*c+Z(i-4,w));
Z_3=[z_3' rz_3']; surf(r*a+X(i-5,w),r*b+Y(i-
5,w),r*c+Z(i-5,w));
X_4=[x_4' rx_4']; surf(r*a+X(i-6,w),r*b+Y(i-
Y_4=[y_4' ry_4']; 6,w),r*c+Z(i-6,w));
Z_4=[z_4' rz_4']; surf(r*a+X(i-7,w),r*b+Y(i-
7,w),r*c+Z(i-7,w));
%Creacion de la esfera surf(r*a+X(i-8,w),r*b+Y(i-
[a,b,c]=sphere(length(z)-1); 8,w),r*c+Z(i-8,w));
%Extraemos las coordenadas surf(r*a+X(i-9,w),r*b+Y(i-
r=0.3; %radio de la esfera 9,w),r*c+Z(i-9,w));
surf(r*a+X(i-10,w),r*b+Y(i-
%Como queremos que la helice se 10,w),r*c+Z(i-10,w));
muestre desde la altura del
cono, buscamos
...mediante un lazo for la surf(r*a+X_1(i,w),r*b+Y_1(i,w),r
posicion 'z(k)', la cuál tendrá *c+Z(i,w));
un valor proximado surf(r*a+X_1(i-
...al de la altura 'h'. 1,w),r*b+Y_1(i-1,w),r*c+Z_1(i-
for k=1:length(z) 1,w));
if h==round(z(k)); surf(r*a+X_1(i-
break 2,w),r*b+Y_1(i-2,w),r*c+Z_1(i-
end 2,w))
end surf(r*a+X_1(i-
3,w),r*b+Y_1(i-3,w),r*c+Z_1(i-
m=1;%variable para crear el 3,w));
video del literal a. surf(r*a+X_1(i-
for vueltas=1:2 4,w),r*b+Y_1(i-4,w),r*c+Z_1(i-
for w=1:2 4,w));
for i=k:length(t) surf(r*a+X_1(i-
5,w),r*b+Y_1(i-5,w),r*c+Z_1(i-
plot3(x(i),y(i),z(i),'- 5,w));
ow',x_1(i),y_1(i),z_1(i),'- surf(r*a+X_1(i-
ow',x_2(i),y_2(i),z_2(i),'- 6,w),r*b+Y_1(i-6,w),r*c+Z_1(i-
ow',x_3(i),y_3(i),z_3(i),'- 6,w));
ow',x_4(i),y_4(i),z_4(i),'- surf(r*a+X_1(i-
ow','markersize',1,'markeredgeco 7,w),r*b+Y_1(i-7,w),r*c+Z_1(i-
lor','k','markerfacecolor','k'); 7,w));
surf(r*a+X_1(i-
%Para cambiar el radio de 8,w),r*b+Y_1(i-8,w),r*c+Z_1(i-
la esfera se multiplica las 8,w));
coordenadas de la surf(r*a+X_1(i-
9,w),r*b+Y_1(i-9,w),r*c+Z_1(i-
9,w));
surf(r*a+X_3(i-
6,w),r*b+Y_3(i-6,w),r*c+Z_3(i-
surf(r*a+X_2(i,w),r*b+Y_2(i,w),r 6,w));
*c+Z_2(i,w));
surf(r*a+X_2(i-
1,w),r*b+Y_2(i-1,w),r*c+Z_2(i- surf(r*a+X_4(i,w),r*b+Y_4(i,w),r
1,w)); *c+Z_4(i,w));
surf(r*a+X_2(i- surf(r*a+X_4(i-
2,w),r*b+Y_2(i-2,w),r*c+Z_2(i- 1,w),r*b+Y_4(i-1,w),r*c+Z_4(i-
2,w)); 1,w));
surf(r*a+X_2(i- surf(r*a+X_4(i-
3,w),r*b+Y_2(i-3,w),r*c+Z_2(i- 2,w),r*b+Y_4(i-2,w),r*c+Z_4(i-
3,w)); 2,w));
surf(r*a+X_2(i- surf(r*a+X_4(i-
7,w),r*b+Y_2(i-7,w),r*c+Z_2(i- 3,w),r*b+Y_4(i-3,w),r*c+Z_4(i-
7,w)); 3,w));
surf(r*a+X_2(i- surf(r*a+X_4(i-
8,w),r*b+Y_2(i-8,w),r*c+Z_2(i- 4,w),r*b+Y_4(i-4,w),r*c+Z_4(i-
8,w)); 4,w));
surf(r*a+X_2(i- surf(r*a+X_4(i-
9,w),r*b+Y_2(i-9,w),r*c+Z_2(i- 5,w),r*b+Y_4(i-5,w),r*c+Z_4(i-
9,w)); 5,w));
surf(r*a+X_2(i-
10,w),r*b+Y_2(i-10,w),r*c+Z_2(i- axis([min(x_4)-5 max(x_4)+5
10,w)); min(y_4)-5 max(y_4)+5 h (z(end)
surf(r*a+X_2(i- +1)])
11,w),r*b+Y_2(i xlabel('Eje x');
-11,w),r*c+Z_2(i-11,w)); ylabel('Eje y');
zlabel('Eje z');
title(['TORNADO [(Pasos):
surf(r*a+X_3(i,w),r*b+Y_3(i,w),r ',num2str(m),']']);
*c+Z_3(i,w)); %view(45,90)
surf(r*a+X_3(i- pause(0.00005)
1,w),r*b+Y_3(i-1,w),r*c+Z_3(i- M(m)=getframe;
1,w));
surf(r*a+X_3(i- m=m+1;
2,w),r*b+Y_3(i-2,w),r*c+Z_3(i- end
2,w)); end
surf(r*a+X_3(i- end
3,w),r*b+Y_3(i-3,w),r*c+Z_3(i- %% CREACIÓN DEL VIDEO
3,w)); Video=VideoWriter('Helice conica
surf(r*a+X_3(i- literal a.avi');
4,w),r*b+Y_3(i-4,w),r*c+Z_3(i- open(Video);
4,w)); writeVideo(Video,M);
surf(r*a+X_3(i- close(Video);
5,w),r*b+Y_3(i-5,w),r*c+Z_3(i-
5,w));