Puede hacerlo en [math] \ mathcal {O} ((| S_1 | + | S_2 |) \ log | S_1 |) [/ math] time.
Primero, clasifique los puntos finales de los segmentos en [math] S_1 [/ math] e itere a través de ellos en orden. A medida que pasa sobre un punto izquierdo para uno de los segmentos, incremente un contador que rastrea el número de segmentos que cubren su ubicación actual. A medida que pasas por un punto correcto, disminuye el contador. Con esto, puede preparar una lista ordenada [matemática] L [/ matemática] de intervalos disjuntos cuya unión es la misma que la de [matemática] S_1 [/ matemática]. Este paso lleva tiempo [math] \ mathcal {O} (| S_1 | \ log | S_1 |) [/ math].
Por ejemplo, si [math] S_1 [/ math] contiene los intervalos [1, 3), [2, 4) y [5, 6), su unión es la misma que la de [math] [1, 4) [/ math] y [math] [5, 6) [/ math]. Puede determinar esto notando que en la coordenada 1, el contador va de 0 (descubierto) a 1 (cubierto); a las 2, va de 1 a 2; a las 3, va de 2 a 1; y luego a las 4, pasa de 1 (cubierto) a 0 (descubierto). Luego, a 5 vuelve a subir a 1, luego a 6 vuelve a bajar a 0.
Una vez que tenga esta lista [matemática] L [/ matemática], puede iterar a través de [matemática] S_2 [/ matemática] y usar [matemática] L [/ matemática] para verificar si cada segmento en [matemática] S_2 [/ matemática] intersecta [matemáticas] S_1 [/ matemáticas]. Para un intervalo dado en [matemática] S_2 [/ matemática], realice una búsqueda binaria para verificar si el punto final izquierdo intersecta uno de los intervalos en [matemática] L [/ matemática]. Si es así, hay una intersección con algún intervalo en [math] S_1 [/ math]. Si no es así, debe estar en uno de los intervalos “vacíos” intermedios, como [4, 5) en el ejemplo anterior. Si el punto final derecho no se encuentra también en el mismo intervalo vacío, eso también significa que hay una intersección con algún intervalo en [matemáticas] S_1 [/ matemáticas].
- Si el círculo A se cruza con el círculo B, ¿puedo saber el área del círculo A a cada lado de la línea entre los dos puntos de intersección?
- ¿Recomendaría tomar geometría no euclidiana?
- ¿Cómo calculas el área de un círculo?
- ¿Cuál es el mayor perímetro posible de un triángulo rectángulo con longitudes de lado entero, si una de las longitudes de los lados es 12?
- ¿Cuál es la ecuación diferencial del círculo que pasa por los puntos de intersección del círculo unitario con el centro en el origen y la línea que divide el primer cuadrante?