Module: Geometria


Problem

5 /7


Pegar mestre

Theory Click to read/hide

Intersecção

Ponto de interseção de linhas

a1, b1, c1 - coeficientes da primeira linha,
a2, b2, c2 - coeficientes da segunda linha,
x, y - ponto de interseção.

\(x = {-(c1 \cdot b2 - c2 \cdot b1) \over (a1 \cdot b2 - a2 \cdot b1)} \\ y = {-(a1 \ cdot c2 - a2 \cdot c1) \over (a1 \cdot b2 - a2 \cdot b1)} \)

Já sabemos como verificar a interseção de linhas (elas não são paralelas) e encontrar seu ponto de interseção.

Agora vamos aprender como fazer isso com segmentos

Primeiro, vamos aprender como simplesmente verificar a interseção deles.

Segmentos se cruzam se as extremidades de um estiverem em lados opostos do outro e vice-versa (isso é facilmente verificado pelo produto vetorial).  O único caso em que isso não funcionará - os segmentos estão em uma linha reta. Para isso, você precisa verificar a interseção dos chamados. bounding box (caixa delimitadora do segmento) - verifique a interseção da projeção dos segmentos no X e no Y.

eixos.

Agora que sabemos como verificar segmentos de interseção, vamos aprender como encontrar o ponto (ou segmento) de sua interseção:
- se eles não se cruzam, é claro que tal ponto não existe;
- caso contrário, construiremos linhas retas nas quais esses segmentos se encontram.

Se forem paralelos, os segmentos estão na mesma linha e precisamos encontrar o segmento de interseção - do máximo das bordas esquerdas dos segmentos ao mínimo das bordas direitas (o ponto é menor que o outro ponto, se for à esquerda, em caso de igualdade X-coordenadas - se for inferior).

Se as linhas não forem paralelas, encontre o ponto de interseção e retorne-o.

Problem

Venceslav leu recentemente um novo livro de coleta e agora quer testar seus conhecimentos no parque. Para simplificar, vamos imaginar o parque como um conjunto de caminhos, que são segmentos de um plano. Wenceslas já caminhou neste parque e sabe qual garota está caminhando por qual caminho. O problema é que Venceslau é muito preguiçoso e só anda por um caminho. E ele também tem preguiça de descobrir que tipo de garotas pode encontrar ao longo do caminho e, portanto, pediu a você, seu melhor amigo, para ajudá-lo nessa difícil questão.
 
Entrada
A primeira linha contém as coordenadas das extremidades do caminho (X1, Y1) e ( X2, Y2), ao longo da qual Wenceslas caminha (\(- 20 <= X1, Y1, X2, Y2 <= 20\)).
A segunda linha contém um inteiro N - o número de caminhos que as garotas percorrem (\(0 <= N <= 5\) ).
Nas N linhas seguintes, insira as coordenadas dos finais dos caminhos pelos quais as meninas caminham (Xi1, Yi1) e (Xi2, Yi2 ), por i -th caminho caminhando i-th girl (\(-20 <= X_{i1}, Y_ {i1}, X_{i2 }, Y_{i2} <= 20\))
 
Saída
Na primeira linha imprima o número M - o número de garotas cujos caminhos se cruzarão com o caminho de Venceslau (tocar os caminhos é considerado uma interseção).
Na segunda linha, imprima M números - números de garotas que nosso herói conhecerá. As meninas são numeradas a partir de um!
 
Exemplos
# Entrada Saída
1
0 0 2 2
1
0 2 2 0
1
1