Ok, tengo una idea más clara del problema ahora, e inspirada por @walkytalky sugerencia, aquí hay una respuesta más elaborada.
Usted mencionó que p1
y viajan a lo largo de segmentos de línea recta. No sé si estos segmentos están alineados de manera que tanto p1
como siempre comiencen nuevos segmentos al mismo tiempo. Sin embargo, siempre puede cortar un segmento de línea en dos segmentos de línea (con la misma pendiente) para que tanto p1
como siempre comiencen nuevos segmentos de línea al mismo tiempo.
Supongamos p1
desplaza a lo largo de línea A-B
, y p2
viajes (al mismo tiempo) a lo largo C-D
como un parámetro t
va desde 0 a 1. (Esto es, en el tiempo de t=0.5
, p1
está en el medio de A-B
y p2
en el medio de C-D
.)
al permitir que Ax
y Ay
denotan la coordenada x e y del punto A
(y lo mismo para B
, C
y D
) podemos expresar p1
y 01.230.como funciones de t
de la siguiente manera:
p1(t) = (Ax + t*(Bx - Ax), Ay + t(By - Ay))
p2(t) = (Cx + t*(Dx - Cx), Cy + t(Dy - Cy))
(. Por ejemplo, cuando t=0
, Ax + t*(Bx - Ax)
evalúa a Ax
, y cuando se evalúa como t=1
Bx
)
para encontrarse "a-vertex- IS-paso-por-entre-P1-P2" -y -tiempo que hacer lo siguiente:
para cada obstáculo vértice v=(Vx, Vy)
tenemos que encontrar una manera que t
p1(t)
, p2(t)
y v
están en línea uno con el otro.
Esto se puede hacer mediante la resolución de las ecuaciones siguientes (dos ecuaciones y dos desconocido, t
y k
):
Vx=p1(t).x + k*(p2(t).x - p1(t).x)
Vy=p1(t).y + k*(p2(t).y - p1(t).y)`
Si k
se encuentra entre 0 y 1, el vértice de polígono v
es en realidad entre la línea (extendida) A-B
y la línea (extendida) C-D
. Si t
también está entre 0 y 1, el vértice v
se pasa realmente por la línea p1-p2
durante el tiempo que los puntos viajan a lo largo de estos segmentos (ya que cuando t
es, digamos, 1.3, los puntos ya estarán en segmentos nuevos).
Una vez que se ha calculado todo "a-vertex-is-passing-by-between-p1-and-p2" -times, es una tarea sencilla de entender el resto. (Es decir, averiguar si se trata de un "devenir-en-vista", "devenir-fuera de la vista" o "ni" tipo de paso):
Para todos los pares t0
y t1
de vertex- consecutiva En los tiempos pasados, verifica si la línea p1((t1-t0)/2)-p2((t1-t0)/2)
está libre de intersecciones con un borde de polígono. Si está libre de intersecciones, los puntos estarán a la vista durante todo el período (t0-t1
), de lo contrario estarán fuera de la vista durante todo el período (ya que no se pasan otros vértices durante este período de tiempo).
El umbral es cero, de lo contrario la solución no es exacta y no cumple los criterios de límite (ya que puede elegir cualquier cosa que esté en el lado equivocado del error y obtener la respuesta incorrecta). –
Veo a qué te refieres. – aioobe