Configuración
Considere el siguiente diagrama:
El "cono 2D" con origen A separa el plano 2D en 2 regiones, dentro y fuera.
Considere los 4 bordes representativos $c, d, e, f$ que incluyen todos los casos de intersección (asuma que un borde alineado con el límite del cono es equivalente a $e$).
Un borde está completamente dentro del cono, tiene un punto final dentro y otro fuera, tiene ambos puntos finales fuera pero un subconjunto de su interior está dentro, o está completamente fuera.
Estamos buscando los puntos de intersección del cono $A$ con cada borde. Para $c$ sería el punto final más a la derecha y el punto de intersección del borde del cono con el segmento, para $e$ serían los 2 extremos del segmento, para $f$ no existe punto de intersección, para $d$ son los 2 puntos donde el límite del cono intersecta el interior de $d$.
Problema
Con esta configuración, aquí está el problema práctico:
El cono $A$ está definido por un origen $A$ y 2 direcciones $d_1, d_2$. Cada segmento está definido por sus 2 puntos finales $p_1, p_2$.
Dado un cono arbitrario, con un ángulo interior menor que $\pi$ y un segmento arbitrario, usa exclusivamente álgebra de vectores para encontrar los 2 puntos de intersección. Si no es posible la intersección, identifícalo de alguna manera, codificado numéricamente en los 2 puntos. Puedes asumir que las direcciones $d_1, d_2$ siempre te son dadas en orden de las manecillas del reloj.
Enfoque actual
Mi enfoque actual es, tomar los 2 puntos finales del segmento, verificar su signo angular con respecto a la ventana (lo cual se hace mediante el producto punto de 2 productos cruz). Con los ángulos firmados de cada punto final identifico si el punto está dentro o fuera de la ventana. Un punto está en el interior si $0 < \sigma < w$ donde $\sigma, w$ son los ángulos firmados del punto con respecto al borde más a la derecha del cono y $w$ es el ángulo del cono.
Con esa información puedo decidir en qué caso de los 4 realmente estoy, y luego tomar decisiones con esa suposición.
Por ejemplo, si solo uno de los 2 puntos finales está en el interior, sé con certeza que hay un punto de intersección único con uno de los 2 límites, así que averiguo cuál es y luego sé los 2 puntos de intersección.
Esto es excesivamente complicado. Estoy curioso si hay una forma más unificada de encontrar ambos puntos de intersección sin tener que crear un gran árbol de condicionales if else
.