Me han dado un conjunto de puntos $p_1,...,p_n\in\Bbb R^d$ en posición general. Quiero determinar sólo las aristas del casco convexo $C:=\mathrm{conv}\{p_1,...,p_n\}$ y esto de la manera más eficiente posible. Especialmente, no quiero calcular el casco convexo completo con todas sus caras y luego extraer sólo el $1$ -cara del resultado. Esto supondría demasiada sobrecarga.
De forma abstracta, el problema plantea lo siguiente:
Para qué pares $(p_i,p_j)$ existe una función lineal $\Bbb R^d\to\Bbb R$ que toma su máximo exactamente en $p_i$ y $p_j$ ?
Podemos suponer que el origen está dentro del casco convexo, y que todos los puntos serán vértices del casco convexo.
Un algoritmo general sería bienvenido. Sin embargo, para mi caso de uso específico podemos suponer además que todos los puntos son del mismo tipo, es decir, para dos puntos cualesquiera, digamos $p_i$ y $p_j$ existe una transformación de simetría $\phi$ de la disposición, de modo que $\phi(p_i)=p_j$ .
Appraoch
Mi enfoque anterior era el siguiente. Dado un par $(p_i,p_j)$ :
- Calcula $q:=p_i+p_j$ .
- Encuentre los puntos que maximizan $\langle p_i,q\rangle$ .
- Si estos son exactamente los puntos $p_i$ y $p_j$ (ni más ni menos), entonces forman un borde. De lo contrario, no lo hacen.
El algoritmo no da falsos positivos, pero sí falsos negativos. Así que puede encontrar muy pocas aristas. Creo que se trata de elegir $q$ de una manera mejor. Pero no tengo ni idea de cómo hacer esto en general.
Esta pregunta es diferente de mi otra pregunta en cascos convexos, ya que aquí pido algoritmos eficientes en lugar de técnicas abstractas, y además tengo otras suposiciones sobre el conjunto de puntos.
Además, ya tengo un algoritmo específico en mente, en el que preferiría sólo oír hablar de una opción de trabajo mejor para $q$ . Por supuesto, también son bienvenidos otros enfoques.