Está en la página 1de 7

Universidad de Oviedo

Grado en Fı́sica

Introducción a la Fı́sica Computacional

Julio Manuel Fernández Dı́az, Rosario Dı́az Crespo

Curso 2017-18

Escenas realistas en 3D
Práctica 9

Escenas realistas en 3D

VPython (con el módulo visual) es una herramienta para producir escenas realistas con movimiento
en 3D.

La documentación de visual se puede encontrar en http://vpython.org y un tutorial en


http://vpython.org/contents/docs/visual/VPython Intro.pdf

El módulo visual utiliza el concepto de ventana de visualización la cual se proyecta sobre la pantalla
(2D).

9.1. La ventana de visualización

El origen de la ventana de visualización es (0,0,0). Por defecto el eje +x es horizontal hacia la


derecha, el +y es vertical hacia arriba y el +z apunta hacia afuera de la pantalla hacia el observador.

Las coordenadas x, y, z se miden en las unidades que se deseen. Entonces la visualización se escala
de manera adecuada a la escena.

9.2. Objetos

Los objetos creados mantienen su existencia durante la ejecución del programa.

Se debe dar a cada objeto un nombre (como bola o caja) si deseamos usarlo más adelante en el
programa.
Ejemplo 9.2.1. Dar nombres a los objetos.

from visual import *


caja=box(pos=vector(4,2,3),
size=(8,4,6), color=color.red)
bola=sphere(pos=vector(4,7,3), radius=5,

1
Universidad de Oviedo Departamento de Fı́sica

color=color.green)

La salida gráfica de este ejemplo es:

9.3. Modificando el punto de vista

Se puede girar el “mundo” pulsando el botón derecho del ratón en la ventana de VPython que
genera visual y arrastrando sin soltar el botón.

También se puede “ver” la escena desde más cerca o lejos. Para ello se pulsa el botón central del
ratón y se arrastra (en ratones con dos botones se pulsan a la vez los mismos).

Para acabar el programa debe cerrarse la ventana gráfica.

9.4. Controlando la visualización

También se pueden definir mediante el programa diversos atributos de la pantalla de visualización.

Para ello se utiliza display, que crea una figura con los atributos especificados y retorna una variable
figura que luego se puede usar.

Ejemplo 9.4.1. Control de la visualización.

escena = display(title="Cubo",
width=600, height=200,
center=(5,0,0), background=(0,1,1))
crea una ventana de 600 por 200 con el tı́tulo “Cubo”, centrada en la posición (5, 0, 0) con un color
de fondo cyan.

Si no se da nombre (escena en nuestro caso) entonces visual le da el nombre genérico scene.

Se pueden cambiar otras caracterı́sticas de escena como muestra el siguiente ejemplo.

Introducción a la Fı́sica Computacional 2


Universidad de Oviedo Departamento de Fı́sica

Ejemplo 9.4.2. Control de la visualización.

# proporción de luz ambiente (por defecto 0.2)


escena.ambient = 0.7
# dirección de la iluminación
escena.lights = [vector(0,0.3,0) ]
# dirección desde donde mira la "cámara"
escena.forward=vector(0.1,-0.10,0.0)
# campo de visión de la cámara en radianes
escena.fov=1e-14 # aproximadamente ortogonal

(luego veremos la función vector):

9.5. Atributos

Los objetos tienen atributos, propiedades como la posición (bola.pos), el color (bola.col), el radio
(bola.radius) u otros parámetros de tamaño (dependientes del objeto).

Podemos asignar valores de atributos a los objetos cuando se crean mediante su constructor (como
en el ejemplo anterior) y se pueden modificar más adelante: bola.radius = 10. Al cambiar el
atributo de un objeto, visual cambia automáticamente la presentación del mismo.

9.6. Atributos creados por el usuario

Además del conjunto de atributos que existen al crear un objeto, se pueden crear nuevos atributos.
Si se crea una esfera denominada marte, aparte de su radio, color y localización se pueden crear
otros atributos como marte.masa, marte.velocidad, etc.

Esto sirve para que los programas que usen visual tengan una enfoque orientado a objetos y
facilitan el uso y lectura del código.

9.7. Creación de vectores 3D

Se pueden crear magnitudes vectoriales 3D y realizar operaciones con ellas (por ejemplo asignar una
posición).

Para crear un vector: a = vector(cx, cy, cz), siendo cx, su componente x, etc. Para acceder a
las componentes se usa a.x, a.y, a.z.

Introducción a la Fı́sica Computacional 3


Universidad de Oviedo Departamento de Fı́sica

9.8. Operaciones con vectores 3D

Para sumar dos vectores se usa el operador +:


a = vector(1,2,3)
b = vector(4,5,6)
c=a+b
Si se imprime c se muestra un vector con componentes (5, 7, 9).

Asimismo, se puede usar un vector para usarlo como posición, como en el ejemplo anterior:
bola=sphere(pos=vector(4,7,3),
radius=5,color=color.green)

9.9. Dibujo de otros elementos

Se pueden dibujar otros objetos como cilindros (cylinder), conos (cone), flechas (arrow), etiquetas
de texto (label), curvas (curve), etc.

Se pueden dar texturas de materiales (materials), por ejemplo de plástico:


bola=sphere(pos=vector(4,7,3), radius=5,
material=materials.plastic)

Ejemplo 9.9.1. Animación en 3D de una bola de madera en un suelo azul.

from visual import *


suelo = box(pos=(0,0,0), length=4, height=0.5,
width=4, color=color.blue)
bola = sphere(pos=(0,4,0), radius=1, material=materials.wood)
bola.velocidad = vector(0,-1,0)
dt = 0.01
while 1:
rate(100) # ‘frames’ por segundo
bola.pos = bola.pos + bola.velocidad*dt
if bola.y < bola.radius:
bola.velocidad.y = abs(bola.velocidad.y)
else:
bola.velocidad.y = bola.velocidad.y-9.8*dt

Introducción a la Fı́sica Computacional 4


Universidad de Oviedo Departamento de Fı́sica

La salida gráfica de este ejemplo es:

Ejemplo 9.9.2. Red cristalina del Fe-α.

El hierro α forma cristales cúbicos centrados en el cuerpo de 28.8 nm. Realice una representación
gráfica de una celda de hierro α, suponiendo que el radio de cada átomo es de 4 nm (el real, de
0.14 nm es demasiado pequeño en la visualización).

Dibujaremos cada átomo de Fe de color azul en sus posiciones correspondientes.

# -*- coding: utf-8 -*-


from visual import *
d, r = 28.8, 4
# vértices del cubo
xv, yv, zv = [0, d], [0, d], [0, d]
# centro del cubo
xc, yc, zc = 0.5*d, 0.5*d, 0.5*d
sphere(pos=(xc,yc,zc), radius=r, color=color.blue)
for x in xv:
for y in yv:
for z in zv:
sphere(pos=(x,y,z), radius=r, color=color.blue)

La salida gráfica de este ejemplo es:

Ejercicio 9.9.1. El cristal de NaCl (sal común) tiene una estructura cúbica centrada en las caras
(búsquese la forma del cristal en Internet).

Introducción a la Fı́sica Computacional 5


Universidad de Oviedo Departamento de Fı́sica

La constante de la red (lado del cubo) es a = 564 pm. El radio del ión sodio es rNa+ = 116 pm y
el radio del ión cloruro es rCl− = 167 pm.

Dibuje una celda del cristal de NaCl, con los iones sodio de color naranja y los iones cloruro de color
azul.

La salida gráfica de este ejercicio debe ser:

Introducción a la Fı́sica Computacional 6

También podría gustarte