sábado, 30 de abril de 2016

La inclinacion del Cilindro (3d scanning)

Enunciado

El archivo cilindro.asc contiene las coordenadas de 1908 puntos que definen un cilindro. Cada línea del archivo corresponde a un punto. Cada línea tiene tres valores que corresponden a las coordenadas x , y y z del punto en un sistema cartesiano.
a. ¿Cuál es la altura del cilindro? b. ¿Cuál es el radio del cilindro? c. ¿Cuál es la inclinación del eje del cilindro en radianes con respecto al eje z ?

Resolución

Este problema lo resolví(o mejor dicho intenté no quede conforme) 10 minutos antes del cierre del concurso. Sinceramente no tenia una idea clara de como analizar todos los puntos y no encontré información sobre si existe alguna técnica o algoritmo para interpretar la nube de puntos( point cloud ) generada a partir de un scanner 3d.

Imagen descriptiva

A lo único que atine fue abrirlo con FreeCad y ver si el cilindro se encontraba en alguna posición que me facilitara las cosas. Pensé que podía tener suerte y encontrar que solo este rotado sobre el eje y, y así encontrar la inclinación buscando los puntos extremos, sin embargo no fue así, existía una pequeña rotación en los otros ejes.

Imagen descriptiva

No tenia mucho mas tiempo, así que decidí despreciar esas pequeñas rotaciones y supuse que solo estaba rotado en y. 
De este modo busqué los puntos extremos, se busca el mas alto(en z), el mas a la izquierda(en x), el mas a la derecha(en x) y el mas bajo(en z). 
Con esos datos se calculan las distancia entre los puntos, necesarios según el dato. Para la altura es la distancia entre el mas alto y el punto mas a la izquierda. Para el radio es la mitad de la distancia entre el mas alto y el mas a la derecha. En el caso del angulo lo calculo como el arcsen() entre el punto mas alto y el mas a la izquierda.

El script esta programado en python y lo que hace es abrir el archivo y recorrer linea por linea los puntos, e ir comparando las coordenadas x,y,z para determinar si es alguno de los puntos extremos.

El resultado de ejecutar el script es el siguiente:

$ python cilindro.py
La altura del cilindro es : 17.071515
El radio del cilindro es : 7.385974
El angulo(radianes) es : 0.573682

Las repuestas que dieron desde CITES eran:
altura = 2⋅e⋅π=17.079468…2⋅e⋅π=17.079468
radio = e²=7.389056…e2=7.389056
angulo= 0.574402

La verdad que no quede muy a gusto con la solución que plantee, pero las respuestas estuvieron demasiado precisas.
La
Comparte este articulo
  • Comparte con Facebook
  • Comparte con Twitter
  • Comparte con Google+
  • Comparte con Stumble Upon
  • Comparte con Evernote
  • Comparte con Blogger
  • Comparte con Email
  • Comparte con Yahoo Messenger
  • More...

0 comentarios:

Publicar un comentario