2009-10-13 22 views
5

He resuelto un método para probar si hay dos segmentos/rangos de línea unidimensionales.Prueba de intersección de rangos/segmentos de línea unidimensional: ¿Nombre de la solución?

Así se define un intervalo como:

[min, max] 

Dadas dos instancias de rango:

a = [min, max] 
b = [min, max] 

utilizo el siguiente para probar si se intersecan:

(a.max - b.min) * (b.max - a.min) >= 0. 

Creo que este es un producto cruzado unidimensional, entonces mi pregunta es:

¿Esta solución está clasificada como un producto cruzado unidimensional o algo más?

+0

La generalización de productos cruzados es el producto de cuña que produce el álgebra exterior de un espacio vectorial. https://en.wikipedia.org/wiki/Exterior_algebra –

Respuesta

8

¿Qué tal:

intersects = !((a.max < b.min) || (b.max < a.min)) 

Eso es más rápido (sin multiplicar involucrado y un compilador decente optimizará la distancia NO) y tan fácil de leer.

+0

Buena solución Aaron, estoy de acuerdo, es más claro que mi solución, creo que usaré esto en lugar de mi código :) –

1

Un producto transversal unidimensional es meramente x*y para x y y ambos números reales. Así que supongo que se podría llamar a esto un producto cruzado unidimensional, pero ese es simplemente un nombre elegante para una multiplicación.

Es un lindo truco, pero no creo que tenga ninguna consecuencia especial matemáticamente. Los productos cruzados son todos sobre vectores, no segmentos de línea.

+0

Gracias Peter, sí, estaba buscando un nombre elegante :) –

Cuestiones relacionadas