Está en la página 1de 29

CURVAS EN 3D MEDIANTE ECUACIONES PARAMÉTRICAS

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.

ECUACIONES PARAMÉTRICAS DE LA RECTA CONOCIDOS UN PUNTO Y UN


VECTOR DIRECTOR

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

clc; clear all,close all;

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

ECUACIONES PARAMÉTRICAS DE LA RECTA CONOCIDOS DOS PUNTOS DE LA


MISMA
Si en vez de conocer un punto A y un vector director v de una recta conocemos al
menos dos puntos de la misma A y B, también podremos calcular su ecuación
paramétrica. Para ello, basta con utilizar ambos puntos para calcular un vector
director aplicando la propia definición de vector. De esta forma, un posible vector
podría ser v = (b1−a1, b2−a2).
Las ecuaciones paramétricas de cualquier recta r se pueden obtener por medio de la
siguiente expresión:
- x=a1+ t ⋅ (b1−a1)
- y=a2+ t ⋅ (b2−a2) t ∈R
Donde:
1. x e y son las coordenadas de cualquier punto P(x,y) de la recta.
2. a1 y a2 son las coordenadas de un punto conocido de la recta A(a1,a2).
3. b1 y b2 son las coordenadas de otro punto conocido de la recta B(b1,b2).
4. t es la variable independiente que determina cada coordenada P(x,y)
dependiendo del valor que se le asigne.
ECUACIONES PARAMÉTRICAS DE UN RESORTE CIRCULAR EN 3D:

clc; clear all,close all;

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.

EXPLICACIÓN DEL CÓDIGO:


Realizamos las animaciones de en dos figuras diferentes, ya que al utilizar subplot y
grabar el video solo se lograba obtener la animación de un caso o se presentaban
problemas. El uso de lazos, títulos, entre otros es casi idéntico para ambos casos a y
b, la única diferencia radica en la trayectoria que sigue la partícula para cada caso.
a. Siga la curva anterior
 Hold off/on: El uso de estas funciones es clave, en la realización
del programa pedido. Dentro de un lazo for se coloca un hold off y
se crea un plot3 que muestre solamente la trayectoria solicitada.
Luego se coloca un hold on y se crea un plot3 que muestre cada
coordenada o punto que forma la trayectoria. Al intercalar de este
modo, se muestra la animación de ambas figuras trayectoria-punto
(hold on) y se evita que estas se repitan conforme transcurre la
animación (hold off). Esto también se puede lograr utilizando la
siguiente sintaxis: plot3(x,y,z,’-b’,x(i),y(i),z(i),’ob’), donde i es el
paso del lazo for.

b. Vaya por el centro


 Hold off/on: Este caso es bastante similar al del inciso a), la
diferencia radica en la trayectoria que ahora seguirá la partícula.
Ahora la partícula debe seguir una trayectoria circular que pase por
el centro de cada bucle del resorte para ello se debe crear una
circunferencia en coordenadas paramétricas de radio 3 (para este
caso). La sintaxis y el funcionamiento del programa es exactamente
igual, lo único que cambia es la trayectoria ahora a seguir de la
partícula. Y, por último, como se desea siempre que pase la
partícula a la altura del centro de cada bucle del resorte, la
coordenada en el eje z para la partícula siempre será el elemento en
la posición del vector length(z)/2 de la coordenada en el eje z de
la gráfica del resorte.

clc; clear all,close all; open(Video);


writeVideo(Video,M);
t = linspace(0,2*pi,256); close(Video);
x = 3*cos(t)+cos(10*t).*cos(t);
y = 3*sin(t)+cos(10*t).*sin(t); figure;
z = sin(10*t); for j=1:length(t)
%Caso b)
x_1=3.*cos(t); hold off
y_1=3.*sin(t); plot3(x,y,z,'-b');
hold on
for i=1:length(t)
%Caso a) plot3(x_1(i),y_1(i),z(length(z)/
hold off 2),'-
plot3(x,y,z,'-b'); og','markeredgecolor','k','marke
hold on rfacecolor','g');
plot3(x(i),y(i),z(i),'- xlabel('Eje x');
og','markeredgecolor','k','marke ylabel('Eje y');
rfacecolor','g'); zlabel('Eje z');
xlabel('Eje x'); title('b) Partícula por el
ylabel('Eje y'); centro de la figura');
zlabel('Eje z'); pause(0.05)
title('a) Partícula
siguiendo la curva'); N(i)=getframe;
pause(0.05) end

M(i)=getframe; %% CREACIÓN DEL VIDEO


end Video=VideoWriter('resorte
b.avi');
%% CREACIÓN DEL VIDEO open(Video);
Video=VideoWriter('resorte writeVideo(Video,N);
a.avi'); close(Video);

Resultados:
(Videos guardados en la carpeta de Deberes(Montero_Lopez)).

ESPIRALES – HELICOIDES – CARACOLAS:

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

La realización de dichas animaciones es prácticamente igual a la del ejemplo anterior.


Las diferencias entre cada una de estas animaciones, es la trayectoria que van a
seguir las esferas y el uso de la función ‘sphere’ en vez de un marcador generado por
la función ‘plot3’.

3.- Las espirales en 3D.

3.1.- Hélices.

3.1.1.- Cilíndricas.

clc; clear all,close all; M(i)=getframe;


end
t = linspace(0,15*pi,256);
x = 2.*cos(t); %% CREACIÓN DEL VIDEO
y = 2.*sin(t); Video=VideoWriter('Helice
z = 100.*t; cilindrica literal a.avi');
open(Video);
%Creacion de la esfera writeVideo(Video,M);
[a,b,c]=sphere(255); %Extraemos close(Video);
las coordenadas
r=0.25; %radio de la esfera figure;
for j=1:length(t)
for i=1:length(t) %Caso b)
%Caso a) hold off
hold off plot3(x,y,z,'-b');
plot3(x,y,z,'-b'); hold on
hold on surf(r*a,r*b,r*c+z(j));
%Para cambiar el radio de la axis([-3 3 -3 3 0 z(end)])
esfera se multiplica las xlabel('Eje x');
coordenada de la ylabel('Eje y');
...esfera o el radio zlabel('Eje z');
deseado y para cambiar su title('b) Partícula por el
posición se suma la centro de la figura');
...posición deseada acada pause(0.05)
coordenada.
surf(r*a+x(i),r*b+y(i),r*c+z(i)) N(j)=getframe;
; end
axis([-3 3 -3 3 0 z(end)])
xlabel('Eje x'); %% CREACIÓN DEL VIDEO
ylabel('Eje y'); Video_1=VideoWriter('Helice
zlabel('Eje z'); cilindrica literal b.avi');
title('a) Partícula open(Video_1);
siguiendo la curva'); writeVideo(Video_1,N);
pause(0.05) close(Video_1);
Resultados:
(Videos guardados en la carpeta de Deberes(Montero_Lopez)).

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.

clc; clear all,close all; m=1;%variable para crear el


video del literal a.
h=10; %altura del cono. Esto for i=k:length(t)
valor ayudará a definir el axis. %Caso a)
a=2; %control de vueltas hold off
t = linspace(0,15*pi,256); plot3(x,y,z,'-b');
z=t; hold on
x=((h-z)./h)*a.*cos(a.*t); %Para cambiar el radio de
y=((h-z)./h)*a.*sin(a.*t); la esfera se multiplica las
coordenadas de la
%Creacion de la esfera ...esfera o el radio
[a,b,c]=sphere(255); %Extraemos deseado y para cambiar su
las coordenadas posición se suma la
r=1; %radio de la esfera ...posición deseada a cada
coordenada.
%Como queremos que la helice se
muestre desde la altura del surf(r*a+x(i),r*b+y(i),r*c+z(i))
cono, buscamos ;
...mediante un lazo for la axis([-10 10 -10 10 h
posicion 'z(k)', la cuál tendrá z(end)])
un valor proximado xlabel('Eje x');
...al de la altura 'h'. ylabel('Eje y');
for k=1:length(z) zlabel('Eje z');
if h==round(z(k)); title('a) Partícula
break siguiendo la curva');
end
end pause(0.05)
M(m)=getframe;
m=m+1; axis([-10 10 -10 10 h
end z(end)])
xlabel('Eje x');
%% CREACIÓN DEL VIDEO ylabel('Eje y');
Video=VideoWriter('Helice conica zlabel('Eje z');
literal a.avi'); title('b) Partícula por el
open(Video); centro de la figura');
writeVideo(Video,M);
close(Video); pause(0.05)
N(n)=getframe;
n=1;%variable para crear el n=n+1;
video del literal b. end
figure;
for j=k:length(t) %% CREACIÓN DEL VIDEO
%Caso b) Video_1=VideoWriter('Helice
hold off conica literal b.avi');
plot3(x,y,z,'-b'); open(Video_1);
hold on writeVideo(Video_1,N);
surf(r*a,r*b,r*c+z(j)); close(Video_1);

Resultados:

(Videos guardados en la carpeta de Deberes(Montero_Lopez)).

3.1.3.- Esféricas.

clc; clear all,close all; for i=1:length(t)


a_1=0.1; %constante %Caso a)
hold off
t = linspace(-10*pi,10*pi,256); plot3(x,y,z,'-b');
c=atan(a_1.*t); hold on
x=cos(t).*cos(c); %Para cambiar el radio de
y=sin(t).*cos(c); la esfera se multiplica las
z=-1.*sin(c); coordenadas de la
...esfera o el radio
%Creacion de la esfera deseado y para cambiar su
[a,b,c]=sphere(255); %Extraemos posición se suma la
las coordenadas ...posición deseada a cada
r=0.05; %radio de la esfera coordenada.
plot3(x,y,z,'-b');
surf(r*a+x(i),r*b+y(i),r*c+z(i)) hold on
; surf(r*a,r*b,r*c+z(j));
axis([-1 1 -1 1 -1 1]) %como todo está en función
xlabel('Eje x'); de senos, cosenos y tangentes,
ylabel('Eje y'); los límites
zlabel('Eje z'); ...para todos los ejes serán
title('a) Partícula de [-1,1].
siguiendo la curva'); axis([-1 1 -1 1 -1 1])
xlabel('Eje x');
pause(0.05) ylabel('Eje y');
M(i)=getframe; zlabel('Eje z');
end title('b) Partícula por el
centro de la figura');
%% CREACIÓN DEL VIDEO
Video=VideoWriter('Helice pause(0.05)
esferica literal a.avi'); N(j)=getframe;
open(Video); end
writeVideo(Video,M);
close(Video); %% CREACIÓN DEL VIDEO
Video_1=VideoWriter('Helice
figure; esferica literal b.avi');
for j=1:length(t) open(Video_1);
%Caso b) writeVideo(Video_1,N);
hold off close(Video_1);

Resultados:
(Videos guardados en la carpeta de Deberes(Montero_Lopez)).

3.1.4.- Esféricas de Steiffert.

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.

clc; clear all,close all; r_1=jacobiSN(s,k);


theta=k.*s;
k=1/5; %constante z=jacobiCN(s,k);

s = linspace(-10*pi,10*pi,256); [x,y,z] = pol2cart(theta,r_1,z);


%Creacion de la esfera figure;
[a,b,c]=sphere(255); %Extraemos %Se crea un vector auxiliar z_1
las coordenadas mediante linspace con los
r=0.05; %radio de la esfera valores mínimo y
...máximo del eje z de la
for i=1:length(s) trayectoria de la helice de
%Caso a) Steiffert. Esto permite
hold off ...que la esfera recorra una
plot3(x,y,z,'-b'); línea recta por el centro de la
hold on hélice.
%Para cambiar el radio de z_1=linspace(min(z),max(z),lengt
la esfera se multiplica las h(s));
coordenadas de la for j=1:length(s)
...esfera o el radio %Caso b)
deseado y para cambiar su hold off
posición se suma la plot3(x,y,z,'-b');
...posición deseada a cada hold on
coordenada. surf(r*a,r*b,r*c+z_1(j));

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:

(Videos guardados en la carpeta de Deberes(Montero_Lopez)).


3.1.5.- Slinky.

clc; clear all,close all; title('a) Partícula


w=2*pi*0.1; siguiendo la curva');
a=0.01;
h=5; pause(0.05)
M(i)=getframe;
t = linspace(0,10*pi,256); end
x=(1+(a.*cos(w.*t))).*cos(t);
y=(1+(a.*cos(w.*t))).*sin(t); %% CREACIÓN DEL VIDEO
z=(h.*t)+(a.*sin(w.*t)); Video=VideoWriter('Slinky
literal a.avi');
%Creacion de la esfera open(Video);
[a,b,c]=sphere(255); %Extraemos writeVideo(Video,M);
las coordenadas close(Video);
r=0.3; %radio de la esfera
figure;
for i=1:length(t) %Se crea un vector auxiliar z_1
%Caso a) mediante linspace con los
hold off valores mínimo y
plot3(x,y,z,'-b'); ...máximo del eje z de la
hold on trayectoria de la helice de
%Para cambiar el radio de Steiffert. Esto permite
la esfera se multiplica las ...que la esfera recorra una
coordenada de la línea recta por el centro de la
...esfera o el radio hélice.
deseado y para cambiar su
posición se suma la for j=1:length(t)
...posición deseado acada %Caso b)
coordenada. hold off
plot3(x,y,z,'-b');
surf(r*a+x(i),r*b+y(i),r*c+z(i)) hold on
; surf(r*a,r*b,r*c+z(j));

axis ([-2 2 -2 2 0 max(z)]) axis ([-2 2 -2 2 0 max(z)])


if z(i)==100 if z(i)==100
break break
end end
xlabel('Eje x');
ylabel('Eje y'); xlabel('Eje x');
zlabel('Eje z'); ylabel('Eje y');
zlabel('Eje z');
title('b) Partícula por el
centro de la figura'); %% CREACIÓN DEL VIDEO
Video_1=VideoWriter('Slinky
pause(0.05) literal b.avi');
N(j)=getframe; open(Video_1);
end writeVideo(Video_1,N);
close(Video_1);

Resultados:

(Videos guardados en la carpeta de Deberes(Montero_Lopez)).

HÉLICE CILÍNDRICA

Una hélice, a veces también llamada bobina, es una curva para la


cual la tangente hace un ángulo constante con una línea fija. La
trayectoria más corta entre dos puntos en un cilindro (uno no
directamente sobre el otro) es una vuelta fraccionaria de una hélice,
como puede ser visto cortando el cilindro a lo largo de uno de sus
lados, aplanándola hacia fuera, y observando que una línea recta que
conecta los puntos llega a ser helicoidal si esta envuelve a un cilindro
(Steinhaus 1999, p. 229).

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:

Una hélice está dada por las ecuaciones:


X=a*cos(t)
Y=a*sen(t)
Z=kt
En donde a es una constante con la cual se puede controlar el número de espiras
por altura.

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

donde es una constante. Esta curva es un caso especial de la


,
loxodroma.

HÉLICE ESFÉRICA STEIFFERT

La curva esférica obtuvo al moverse a lo largo de la superficie de una esfera con


velocidad constante, mientras que mantenía una velocidad angular constante con
respecto a un diámetro fijo (Erdos 2000). Esta curva es dada en coordenadas
cilíndricos por las ecuaciones paramétricas
donde k es una constante positiva y sn y cn son las funciones elípticas de Jacobi.

HÉLICE ESFÉRICA SLINKY

Es una curva del espacio que consiste en una espiral enrollada alrededor de una
hélice.

Tiene ecuaciones paramétricas:

3. 2.- Helicoides.
3.2.1.- Circulares.
3.2.2.- Elípticos.
3.2.3.- Hiperbólicos.
3.2.4.- Concha marina.
HELICOIDE CIRCULAR

El helicoide circular o simplemente helicoide es la superficie mínima de la hélice


circular. Por muchos años, el helicoide seguía siendo el único ejemplo que se conocía
de una superficie mínima encajada completa en la topología finita con curvatura
infinita.Sin embargo, en 1992 un segundo ejemplo fue descubierto, conocido como la
superficie mínima de Hoffman que consiste en un helicoide con un agujero (Sci. News
1992).

El helicoide es la única superficie no-rotatoria que puede deslizarse a lo largo de sí


mismo (Steinhaus 1999, p. 231).

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

Es una generalización del helicoide en las ecuaciones paramétricas:


HELICOIDE HIPERBÓLICA

Es la superficie con ecuaciones paramétricas:

donde es la torsión
CONCHA MARINA

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.
Las ecuaciones paramétricas de la concha marina vienen dadas por:

4.- Construcción de caracolas.


4.1.- Introducción.
4.2.- La hélico-espiral.

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).

Las ecuaciones paramétricas son:

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);

CURVAS EN 3D MEDIANTE ECUACIONES CILÍNDRICAS

Ejemplo 1:

clc, clear all, close all


fig = figure;
axes1 = axes('Parent',fig,'Color',[.5 .2 .3]);
hold(axes1,'on')
t = (0:0.1:500);
p=t.^2-1;
theta=t;
z=(t.^2-1);
[X,Y,Z]=pol2cart(theta,p,z);
plot3(X,Y,Z,'b')
title('Ejemplo 1')
xlabel('x')
ylabel('y')
zlabel('z')
grid on

Ejemplo 2
clc, clear all, close all

%CURVA EN COORDENADAS CILINDRICAS 5


fig = figure;
axes1 = axes('Parent',fig,'Color',[.9 .7 .6]);
hold(axes1,'on')
t = (0:0.1:300);
p=sin(t);
theta=(t); z=t.^2;
[X,Y,Z]=pol2cart(theta,p,z);
plot3(X,Y,Z,'k')
title('Ejemplo 5')
xlabel('x')
ylabel('y')
zlabel('z')
grid on
CURVAS EN 3D MEDIANTE ECUACIONES ESFÉRICAS

Ejemplo 1

clc, clear all, close all


fig = figure;
axes1 = axes('Parent',fig,'Color',[.47 .61 .44]);
hold(axes1,'on')
t=(0:0.01:
500);
theta=
1./t;
phi=(
t);
r=(t
);
[X,Y,Z]=sph2cart(theta,phi,r);
plot3(X,Y,Z,'k')
title('Ejemplo 3')
xlabel('x')
ylabel('y')
zlabel('z')
grid on

Ejemplo 2

clc, clear all, close all


fig = figure;
axes1 = axes('Parent',fig,'Color',[.37 .66 .71]);
hold(axes1,'on')
t=(100:0.01:500);
theta=(1./t);
phi=sin(t);
r=cos(t);
[X,Y,Z]=sph2cart(theta,phi,r);
plot3(X,Y,Z,'k')
title('Ejemplo 5')
xlabel('x')
ylabel('y')
zlabel('z')
grid on

DEBER N°21

1. SIMULACIÓN DEL SISTEMA SOLAR PERO AHORA EN 3D: considere la


inclinación de las órbitas de los planetas.

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

Observación: Para facilitar, los planetas solo se trasladan y no giran.

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.

Ley de gravitación universal


Como ejemplo de fuerza que depende de la posición, se usará la gravedad. En la simulación del anterior
programa (tiro parabólico) se consideraba la gravedad como una constante, y se puede considerar
razonable esa simplificación si la simulación es de un sistema que se encuentra cerca de la superficie de
la Tierra y es relativamente de pequeño tamaño. Pero si quisiéramos simular el comportamiento de un
ascensor que llegue hasta la estratosfera, o el de un satélite que orbita la Tierra, etc., considerar un valor
constante del campo gravitatorio terrestre sería mucho simplificar.

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

%SATURNO %mercurio y su órbita


t=(0:0.013:10*pi); plot3(x_mercurio,y_mercurio,z_me
saturno=(t); rcurio,':r')
theta=0.5*pi; hold on
r_saturno=(85); scatter3(x_mercurio(i),y_mercuri
[x_saturno,y_saturno,z_saturno]= o(i),z_mercurio(i),20,'filled','
sph2cart(theta,saturno,r_saturno red');
);%Paso a rectanculares hold on

%URANO %venus y su órbita


t=(0:0.011:10*pi); plot3(x_venus,y_venus,z_venus,':
urano=(t); m')
theta=0.6*pi; hold on
r_urano=(90); scatter3(x_venus(i),y_venus(i),z
[x_urano,y_urano,z_urano]=sph2ca _venus(i),40,'filled','k');
rt(theta,urano,r_urano);%Paso a hold on
rectanculares
%tierra y su órbita
%NEPTUNO plot3(x_tierra,y_tierra,z_tierra
t=(0:0.009:10*pi); ,':b')
neptuno=(t); hold on
theta=0.7*pi; scatter3(x_tierra(i),y_tierra(i)
r_neptuno=(100); ,z_tierra(i),50,'filled','b');
[x_neptuno,y_neptuno,z_neptuno]= hold on
sph2cart(theta,neptuno,r_neptuno
);%Paso a rectanculares %marte y su órbita
plot3(x_marte,y_marte,z_marte,':
%PLUTON k')
t=(0:0.007:10*pi); hold on
pluton=(t); scatter3(x_marte(i),y_marte(i),z
theta=0.85*pi; _marte(i),30,'filled','r');
r_pluton=(110); hold on
[x_pluton,y_pluton,z_pluton]=sph
2cart(theta,pluton,r_pluton); %Jupiter y su órbita
%Paso a rectanculares plot3(x_jupiter,y_jupiter,z_jupi
ter,':g')
hold on
scatter3(x_jupiter(i),y_jupiter( hold on
i),z_jupiter(i),80,'filled','r') scatter3(x_neptuno(i),y_neptuno(
; i),z_neptuno(i),35,'filled','c')
hold on ;
hold on
%Saturno, su órbita y su anillo
plot3(x_saturno,y_saturno,z_satu %Plutón y órbita
rno,':c') plot3(x_pluton,y_pluton,z_pluton
hold on ,':b')
scatter3(x_saturno(i),y_saturno( hold on
i),z_saturno(i),50,'filled','c') scatter3(x_pluton(i),y_pluton(i)
; ,z_pluton(i),25,'filled','g');
hold on hold on
scatter3(x_saturno(i),y_saturno( set(gca,'dataAspectRatio',[1 1
i),z_saturno(i),130,'y'); 1])
hold on
SistemaSolar3D(i)=getframe;
%Urano y su órbita
plot3(x_urano,y_urano,z_urano,': pause(0.0001);
y') end
hold on
scatter3(x_urano(i),y_urano(i),z %% Creación del video
_urano(i),40,'filled','b'); Video=VideoWriter('Sistema_solar
hold on _3D.avi');
open(Video);
%Neptuno y órbita writeVideo(Video,SisteSolar3D);
plot3(x_neptuno,y_neptuno,z_nept close(Video);
uno,':r')
DEBER N°22
2. REALICE LA SIMULACIÓN DE UN TORNADO. Emplear una hélice cónica y
muchas esferas ascendiendo y siguiendo la trayectoria dada por la curva.
https://www.youtube.com/watch?v=9T6l8GwKGlE

Hacerlo como se vio al final de la película: Twister (1996)

https://www.youtube.com/watch?v=u85-yX-ox4Y

Para ingresar al siguiente archivo ingrese al vínculo: 7_GUIDE\Callbacks de


todos los botones.docx

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));

También podría gustarte