Dados 4 pontos nos planos 2D A, B, C, D
, calcule a área da região de interseção dos triângulos OAB
e OCD
, onde O
é o centro do plano, tendo coordenadas (0, 0)
.
Algoritmos que são executados em complexidade de tempo constante (em termos de operações aritméticas) são incentivados, mas não forçados.
Regras
- Cada ponto é representado como dois números reais, denota suas coordenadas X e Y.
- Opcionalmente, se a sua linguagem de programação (ou alguma biblioteca da sua linguagem de programação) tiver um
Point
tipo interno ou equivalente, é permitido que oPoint
objeto seja considerado como entrada.
- Opcionalmente, se a sua linguagem de programação (ou alguma biblioteca da sua linguagem de programação) tiver um
- A entrada é dada como 4 pontos, nos formatos, incluindo, entre outros:
- Uma lista de 8 coordenadas.
- Uma lista de 4 pontos, cada ponto pode ser representado em qualquer formato conveniente.
- Duas listas de 2 pontos.
- etc.
- Você não pode assumir uma ordem específica dos pontos (ordem no sentido anti-horário ou ordem no sentido horário)
- Você não pode assumir que o ponto
O
é passado como entrada. Em outras palavras, o programa não deve receber e usar entradas estranhas. - Você não pode assumir que todos os pontos são diferentes. Em outras palavras, os triângulos podem estar degenerados. Você também precisa lidar com esse caso (veja os casos de teste abaixo)
- A diferença absoluta ou relativa deve ser menor que nos casos de teste de amostra abaixo.
10-3
Critérios de vitória
Isso é código-golfe , a resposta mais curta em bytes ganha!
Casos de teste de amostra
Ax Ay Bx By Cx Cy Dx Dy area
5 1 1 3 -1 0 0 -1 0
5 1 1 3 -1 0 0 0 0
5 1 1 3 0 0 0 0 0
5 1 1 3 3 4 4 -3 4.50418
5 1 1 3 1 2 2 1 1.5
5 1 1 3 -2 5 4 -2 1.74829
5 1 1 3 -2 5 5 4 2.96154
5 1 1 3 3 5 5 4 1.88462
5 1 1 3 3 5 3 1 3.92308
5 1 1 3 3 5 4 -1 5.26619
5 1 1 3 5 1 4 -1 0
5 1 1 3 5 1 1 3 7
1 3 1 3 5 1 1 3 0
1 3 1 3 1 3 1 3 0
4 8 4 -1 -2 6 -2 -3 0
1.2 3.4 -0.3 4.2 5 7.6 -1.1 2.4 2.6210759326188535
3.1 0.6 0.1 7.2 5.2 0.7 0.9 8 9.018496993987977
Se alguém quiser, aqui estão as saídas para o primeiro grupo de casos de teste na forma exata:
0
0
0
46375/10296
3/2
1792/1025
77/26
49/26
51/13
23345/4433
0
7
0
0
0
Imagem ilustrativa para o caso de teste 5 1 1 3 3 4 4 -3
(a área do quadrilátero verde é a saída esperada):
[ ]