Detectando los cubos

Para romper el largo lapso sin posts, presento el siguiente problema (robado de inspirado en uno visto en el blog de Petr Mitrichev):

Desarrollar un algoritmo que, dados 8 puntos en el plano (x_1, y_1), (x_2, y_2), \ldots, (x_8, y_8), determine si existen valores z_1, z_2, \ldots, z_8 tales que los puntos (x_1, y_1, z_1), (x_2, y_2, z_2), \ldots, (x_8, y_8, z_8) forme un cubo en el espacio. O, en otras palabras, que determine si los 8 puntos en el plano pueden formar la proyección paralela de un cubo.

Figura 1. 8 puntos en el plano que pueden verse como la proyección paralela de un cubo.

Figura 2. 8 puntos en el plano que no pueden verse como la proyección paralela de un cubo.

El algoritmo debe poder determinar que 8 puntos tales como (-0.343731, 0.404338), (-0.383761, 0.233634), (0.582329, -0.512121), (0.474738, 0.331386), (-0.236140, -0.439169), (0.622359, -0.341416), (-0.276170, -0.609873) y (0.514768, 0.502091) pueden verse como la proyección de un cubo (ver figura 1); por otro lado, tiene que clasificar al conjunto de puntos (0.085135, -0.025253), (-0.196956, 0.110847), (0.098387, -0.104055), (-0.091524, 0.268373), (0.051493, -0.111503), (-0.183703, 0.032046), (0.190567, 0.132272) y (-0.289135, -0.125480) como incapaz de ser la proyección de un cubo (ver figura 2).

En no menos de una semana, propondré una respuesta (no robada 😀 ) al problema.