Tengo una arista incidente y múltiples aristas salientes, para las que quiero elegir una arista saliente tal que los ángulos entre la arista saliente y la arista entrante sean los más pequeños de todos. Conocemos las coordenadas del vértice V .
El ángulo debe partir de la arista entrante ( e1 ) y termina en otro borde ( e2 , e3 , e4 ).
Además, el ángulo debe formarse de tal manera que la cara construida de e1 a e2 debe estar en dirección contraria a la del cierre. En otras palabras, la cara que se construye al unir todos los vértices V en e1 y ei juntos, debe ser un ciclo en sentido contrario a las agujas del reloj.
Así, en el caso siguiente, el borde e2 debe ser elegido porque el θ es el más pequeño.
¿Existe un algoritmo que lo haga con elegancia? Los pocos algoritmos que ideo son simplemente feos y requieren muchos hacks.
Actualización: Un método que se me ocurre ( y propuesto a continuación ) es utilizar el producto cruzado de cada arista contra la arista entrante e1 y obtener el mínimo θi es decir,
e1×ei=|e1||ei|sinθi
Pero el problema de esto es que no funciona realmente. Considere los siguientes casos de prueba: e1=(1,0) e2=(−1/√(2),1/√(2)) e3=(1/√(2),−1/√(2))
Uno se daría cuenta de que
θ2=−45o θ3=−45o
Ambos son iguales aunque sabemos que e2 debe ser seleccionado.