Libro: Elementary Mechanics Using Python

Tengo un nuevo reto para lo que queda de 2019 y para el primer semestre del 2020. He empezado a leer el libro Elementary Mechanics Using Python: A Modern Course Combining Analytical and Numerical Techniques, de Anders Malthe-Sørenssen. Es todo un curso de física, y combina de manera comprensible los ejemplos clásicos de movimiento, fuerzas, energía,… con sus soluciones numéricas, utilizando las libreriías matemáticas y de gráficos de Python.

Se trata de implementar todos los ejemplos del libro a código Python. No he visto ningún enlace para descargar todo el código, en cualquier caso, los ejemplos quiero adaptarlos y hacérmelos míos. He empezado por el ejemplo del peso suspendido de un muelle, que como todo el mundo sabe la solución del movimiento es sinusoidal entorno al punto de equilibrio, la velocidad es cero en los puntos máximo y mínimo, y la velocidad es máxima en el punto de equilibrio. Este ejemplo se explica en el apartado 5.7, que habla de fuerzas, y no basta con copiar y pegar el código, sino que lo he tenido que adaptar. Esta es mi solución:

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

# Initialize
m = 1.0
# kg
k = 100.0 # N/m
v0 = 1.0
# in m/s
time = 2.0 # s
g = 9.8 # m/s^2

# Numerical setup
dt = 0.0001 # s
n = int(round(time/dt))
t = np.zeros(n,float)
y = np.zeros(n,float)
v = np.zeros(n,float)
# Initial values
y[0] = 0.0
v[0] = v0
# Simulation loop
for i in range(n-1):
\tF = -k*y[i] – m*g
\ta = F/m
\tv[i+1] = v[i] + a*dt
\ty[i+1] = y[i] + v[i+1]*dt
\tt[i+1] = t[i] + dt

fig = plt.figure()
fig.suptitle(u»Objecte suspès d’una molla»)
plot1 = fig.add_subplot(211)
#plot1.set_xlabel(‘t [s]’)
plot1.set_ylabel(‘y [m]’)
plot1.xaxis.grid()
plot1.plot(t,y)
plot2 = fig.add_subplot(212)
plot2.set_xlabel(‘t [s]’)
plot2.set_ylabel(‘v [m/s]’)
#plot1.grid(axis=’y’)
#plt.grid(b=True, which=’minor’, color=’#666666′, linestyle=’-‘)
plot2.xaxis.grid()
plot2.plot(t,v)

for i in range(10, n-1, 400):
\tplot1.plot(t[i],y[i],’ob’)
\tplot2.plot(t[i],v[i],’ob’)

plt.show()

Estos son los capítulos y temas que se tratan en el libro:

4. Motion in One Dimension .
5. Forces in One Dimension .
6. Motion in Two and Three Dimensions
7. Forces in Two and Three Dimensions
8. Constrained Motion
9. Forces and Constrained Motion
10. Work
11. Energy
12. Momentum, Impulse, and Collisions
13. Multiparticle Systems
14. Rotational Motion
15. Rotation of Rigid Bodies
16. Dynamics of Rigid Bodies

Importaciones del Catastro en OSM

Yo soy nuevo en esto de OpenStreetMaps. Pero por la gente que lleva tiempo, veo que en las listas de correo se habla bastante de importaciones del Catastro. Importar el Catastro es importante porque se trata de unir la información geométrica de los edificios con otras capas de información, concretamente la dirección postal de un edificio. Si se consigue esto a nivel general, servicios como Nominatim, que proporcionan geocoding (resolver una dirección postal a coordenadas geográficas; o al revés), será muy útil (como lo es el mismo servicio que proporciona Google Maps).

Vamos a hacer un caso concreto: Bagà, donde no tenemos la información del catastro. Haré la prueba de un edificio de Bagà, por ejemplo Carrer del Raval 13 Bagà. A partir de la información del edificio donde vivo (en Barcelona, donde sí que hay incorporada la información del catastro), veo cómo es el formato de la información que hay que incorporar:

addr:housenumber=13
addr:postcode=08695
addr:street=Carrer del Raval
type=multipolygon

Por tanto, modifico en OSM el builiding en cuestión y añado esta referencia.

Ahora ya podemos ir a Nominatim, y buscar por

Carrer del Raval 13 Bagà

Y lo encuentra! Aquí se ve la importancia de añadir la información del Catastro en OSM.

También podemos hacer la consulta inversa, a partir de las coordenadas encontrar la dirección postal:

https://nominatim.openstreetmap.org/reverse?format=xml&lat=42.25255&lon=1.86283&zoom=18&addressdetails=1

Y el resultado (en formato XML):



13, Carrer del Raval, Bagà, Berguedà, Barcelona, Catalunya, 08695, Espanya

13 Carrer del Raval Bagà
Berguedà
Catalunya 08695 Espanya
es

Vista desde el Refugio de Rebost (realidad virtual)

En el curso de Realidad Virtual nos han hecho hacer una pequeña aplicación de realidad virtual. Entre las diferentes propuestas, RoundMe parece ser una opción fácil y rápida.

Ante todo hemos de descargar de Google Maps una fotografía panorámica, y hay que convertirla como está explicado en el tutorial en un panorama apto para ser importado a RoundMe.

RoundMe me ha parecido bastante inestable. De hecho, no podía colgar mi panorama a Public, me daba un error de upload. De hecho, hice hasta 4 pruebas diferentes el viernes pasado, hasta que lo dejé para después del fin de setmana. Y la sorpresa de hoy domingo noche ha sido que estos 4 panoramas ya están como Publics. Bueno, en fin…

Como ejemplo he encontrado una foto del refugio de Rebost (la foto no es mía, la he cogido de alguien que la ha colgado en Google Maps), y desde el refugio puedo identificar fácilmente unas montañas y pasisajes que me son muy familiares.

Horts urbans de Barcelona

I ara li toco el torn als Horts urbans de Barcelona [1]. En este caso se trata de poca información y la podríamos introducir manualmente. Pero de la manera como lo hemos hecho se podría ejecutar el script en una base anual, y de esta manera se puede eliminar un huerto si este ya no existe, o bien actualizar la información o introducir uno de nuevo. Estos son los huertos urbanos gestionados por el ayuntamiento de Barcelona.

{{geocodeArea:»Barcelona»}}->.boundaryarea;
(
node[«landuse»=»orchard»](area.boundaryarea);
);
out body;

{{style:

node[landuse=orchard] {
icon-image: url(‘https://www.barcelona.cat/estatics-planol/v0.8/img/w/bg/M/M009.png’);
icon-width: 28;
icon-height: 38;
}

}}

Parkings de bicicletas en Barcelona (openstreetmap)

En este caso estamos hablando de 3000 puntos. Ha sido un poco complicado hacer la importación, porque había unos 400 puntos que ya estaban introducidos. Pero de estos, unos 150 no existen en la base de datos del ayuntamiento, que se supone que está actualizada. Somos conscientes de que podría haber parkings de uso privado.

En cualquier caso, como se trata de una importación de 3000 puntos, no se puede ir uno por uno. Realmente, no me había dado cuenta de que habían tantos puntos de parking de bicis. Yo, como voy con la Brompton, no los necesito, la bici siempre va conmigo.

{{geocodeArea:»Barcelona»}}->.boundaryarea;
(
node[«amenity»=»bicycle_parking»](area.boundaryarea);
);
out meta;

{{style:
node[amenity=bicycle_parking] {
icon-image: url(‘http://free-icon-rainbow.com/i/icon_01944/icon_019440_256.png’);
icon-width: 20;
icon-height: 20;
}
}}

Árboles singulares de las Islas Baleares


Hemos actualizado en OpenStreetMap la lista de árboles singulares de las Illes Balears [1], a partir de la experiencia en introducir los árboles monumentales de Catalunya y los árboles singulares de Barcelona.

Además, con overpass-turbo.eu ahora ya sé meter un icondo de un arbolito sobre el punto de interés, y así queda una gráfica muy mona.

area[«name»=»Illes Balears»]->.boundaryarea;
(
nwr(area.boundaryarea)[website~’arbres_singulars_de_les_Illes_Balears’];
);
out meta;

{{style:
node[natural=tree] {
icon-image: url(‘https://img.icons8.com/cotton/2x/tree.png’);
icon-width: 25;
icon-height: 25;
}
}}

Mini-aplicación de realidad aumentada con Zappar

En el marco del curso de realidad virtual, nos piden hacer un pequeño ejemplo de RA (realidad aumentada).

He escogido la herramienta Zappar, que es comercial y tiene una prueba de 30 días. Cuando tenga un poco de tiempo miraré si hay una alternativa con software libre.

En este pequeño ejemplo se tiene que leer el código (una especie de código QR) con la aplicación del móvil, y la pequeña aplicación que he hecho son tres escenas: ver un video; ir a la página web del Pi de les Tres Branques en la wikipedia; i ver diferentes imágenes del Pi de les Tres Branques en Google Images.

Árboles singulares de Barcelona: Salvemos la encina!

Aquí estoy yo estudiando la programación con OSM, actualizando desde un script python los árboles singulares de Barcelona, y evidentemente me he tropezado con la encina de la casita de la calle Encarnació.

Qué contradicción! Por una parte queremos proteger el patrimonio y tomar conciencia del medio natural que tenemos en una gran ciudad, y por otra parte vemos cómo hay gente a la que le importa una mierda todo esto y sólo piensa en un terreno por el valor económico que tiene y el rendimiento que les puede sacar.

Pues esto, tenemos que salvar la encina y las casitas de la calle Encarnació de la especulación urbanística. La gente que está en el ayuntamiento que se mojen de verdad y que pongan sobre la mesa una propuesta que todas las partes.

Para visualizar todos los árboles singulares que hay en Barcelona podemos utilizar overpass-turbo.eu, que nos permite realizar una consulta y ver el resultado gráfico de forma fácil.

area[«name»=»Barcelona»]->.boundaryarea;
(
nwr(area.boundaryarea)[note~’Arbres d\\’interès local de Barcelona’];
nwr(area.boundaryarea)[tree];
);
out meta;

Árboles monumentales de Cataluña en OpenStreetMap (2a parte)

Ya he realizado la actualización de los árboles monumentales, son más de 200 árboles. No hemos querido hacer una inserción automática, porque soy consciente de que ya hay información existente, y quiero ser respetuoso con esta información. Por tanto, el script es interactivo porque, dado un nodo/árbol que ya existe (el criterio es buscar árboles en un entorno de 50m del punto donde quiero insertar), quiero comparar la información antigua con la nueva .

Al final, de la lista de 222 árboles monumentales que tenemos, hemos insertado cerca de un 80% de los árboles, y del resto se ha actualizat la información.

Este verano pasado fuimos a ver el Pi de les Tres Branques. Hacía años que no iba al Camp Llong, cerca de Berga, un lugar realmente idílico. Después quisimos buscar el Pi Jove, también árbol monumental catalogado, que está allí cerca, y no lo encontramos. Ahora cuando vuelva ya no tendré excusa para encontrarlo.

Este ejercicio ha sido un buen punto de partida para colaborar con la comunidad OpenStreetMap con una tarea concreta y fácil. Espero poder seguir colaborando con la actualización de los mapas de OSM.

Árboles monumentales de Cataluña en OpenStreetMap (1a parte)

Estas últimas semanas he renovado mi interés por el proyecto OpenStreetMap, y me he centrado en cómo contribuir en la actualización de los mapas.

Los mapas se pueden actualizar de forma manual, con el editor online iD, o mejor con el editor JOSM (basado en Java). Todo el mundo puede contribuir, e incluso puede ser divertido (y útil).

De todas maneras, mi interés es la programación de las APIs de OSM. Concretamente la OverpassAPI (orientada a hacer búsquedas), y la Osmapi (API v0.6) que es la que se puede utilizar para editar. Con las APIs he conseguido buscar, inserir, actualizar y editar nodos, com lo tengo documentado en la wiki.

Un vez se adquiere un poco de confianza, ya se puede afrontar el reto de actualizar con un script python la lista de los árboles monumentales de Catalunya, catalogados por la Generalitat. Todo ello está explicado en la part 2 del artículo.