Nota: La siguiente solución hace que [math] y [/ math] -coordinates sea igual, la solución para hacer [math] x [/ math] -coordinates seguirá siendo la misma con alguna transformación de coordenadas.
Digamos que dos puntos [matemática] (x_1, y_1) [/ matemática] y [matemática] (x_2, y_2) [/ matemática] tendrán la misma [matemática] y [/ matemática] -coordinada después de la rotación, lo que significa que rotamos el plano por un ángulo [math] \ textrm {tan} ^ {- 1} (\ frac {| y_2-y_1 |} {| x_2-x_1 |}) [/ math]. Entonces, queremos el valor más pequeño de [math] \ frac {| y_2-y_1 |} {| x_2-x_1 |} [/ math] para todos los pares de puntos.
Imagine un punto [matemático] (x_i, y_i) [/ matemático], digamos que puse una varilla horizontal con el centro en [matemático] (x_i, y_i) [/ matemático] y se extiende hacia negativo [matemático] x [/ matemático] -eje. Si lo giro en el sentido de las agujas del reloj, quiero saber cuál es el primer punto [matemático] (x_j, y_j) [/ matemático] que toca de tal manera que [matemático] y_j \ ge y_i [/ matemático]. Del mismo modo, si giro esta barra en sentido antihorario, quiero saber cuál es el primer punto [matemático] (x_j, y_j) [/ matemático] que toca de tal manera que [matemático] y_j \ le y_i [/ matemático] . Llamemos a estos ángulos de tocar como ángulos arriba y abajo. Tenga en cuenta que esto cubrirá todos los pares de puntos.
Ahora, algunas observaciones básicas lo ayudarán. Considere esta imagen donde hemos ordenado todos los puntos de acuerdo con sus coordenadas [matemáticas] y [/ matemáticas]. Considere un nuevo orden de estos puntos como [matemática] p_1, p_2, …, p_n [/ matemática].
- Dada la longitud de Planck, ¿es posible usar pi para medir exactamente la circunferencia de un círculo?
- Si un estudiante quiere publicar un artículo de matemáticas sobre geometría de vectores, ¿cuáles son las mejores conferencias, diarios y revistas?
- Cómo resolver la ecuación de una tangente a un círculo
- ¿Qué son los espacios topológicos donde la razón de la circunferencia de un círculo a su diámetro es diferente de la geometría euclidiana? ¿Qué pasa si esta constante se redondea a 3? ¿Qué ‘consecuencias’ tendría esto?
- Dado el punto A (1,10) y el punto B (20,18) ¿Qué punto divide el segmento de línea dirigida AB en una relación 2: 5?
Digamos que estamos calculando dos ángulos más pequeños hacia arriba y hacia abajo para el punto [math] p_i [/ math]. Al calcular estos ángulos, podemos ignorar con seguridad los puntos que no están en el casco convexo rojo de los puntos [matemática] p_1, p_2, …, p_i [/ matemática]; de manera similar, también podemos ignorar los puntos que no están en el casco convexo azul de los puntos [math] p_i, p_ {i + 1}, …, p_n [/ math]. Además, el ángulo ascendente que estamos viendo está definido por el punto que viene después de [math] p_i [/ math] en el casco convexo azul y el ángulo descendente similar está definido por el punto que viene justo antes de [math] p_i [/ math] en casco convexo rojo.
Ahora, esto se puede resolver fácilmente utilizando el algoritmo Monotone Chain Convex Hull en [math] O (n) [/ math], manteniendo dos pilas, una para los cascos convexos rojos y otros azules. Estoy iterando sobre todo [matemáticas] i [/ matemáticas]. La razón es que la complejidad es general [matemática] O (n) [/ matemática] debido al algoritmo de Andrew en el que mantenemos dos pilas que en cada paso mantienen dos cascos convexos: uno para los puntos [matemática] [1, i] [/ matemática] y otra para puntos [matemática] [i, n] [/ matemática]. La transformación de [matemáticas] i [/ matemáticas] a [matemáticas] i + 1 [/ matemáticas] y viceversa se amortiza el tiempo constante en el algoritmo de Andrew.