En primer lugar, perdón por la posible formulación burda de la pregunta. Sospecho que hay una forma más sofisticada, pero simplemente me falta la jerga específica del dominio. Espero que sea comprensible sin demasiadas molestias.
Supongamos que tenemos un casco convexo y que B y C son dos vértices adyacentes de muchos. Supongamos que tenemos una pendiente kb para una línea a través de B . Supongamos que tenemos una pendiente kc para una línea a través de C . Dada la información es fácil calcular el punto X donde se cruzan las dos líneas.
Me gustaría calcular el ángulo BXC . Es fácil en la mayoría de los casos creando los vectores BX y CX aplicando la fórmula:
arccos( BX punto CX / |BX| * |CX| )
El problema se produce cuando el punto de intersección X es el mismo que el vértice C . En tal caso, necesito otro punto en la línea que pasa por C porque el vector CX entonces es sólo el origen , es decir, (0,0). La obtención de estos puntos es trivial porque sólo tenemos que poner diferentes valores para t en la fórmula de la línea, kc t + mc .
El problema que no puedo resolver es cómo elegir dicho valor. Puede ser t < C.x pero también t > C.x y dependiendo de cuál elija, el ángulo calculado será diferente. Tengo que elegir t de manera que el segundo punto de la línea c sea más lejos en el sentido de las agujas del reloj de B que C es. ¿Cómo lo hago?
He tratado de relacionar la t a los otros puntos, a las coordenadas de B el punto D después de C etc. Sin embargo, parece que siempre hay un caso en el que deja de funcionar, así que supongo que necesito un empujón en la dirección correcta sobre cómo razonar aquí.
Hay que tener en cuenta que las pendientes kb y kc no se alinean con los lados del casco convexo y pueden ser o no paralelos a alguna arista del mismo. Sin embargo, sí son tangentes a los vértices.