Encontrando o Ângulo Interno

Este desafio trata de polígonos não convexos, como os dois polígonos representados abaixo. Polígonos não convexos

Uma propriedade especial dos polígonos não convexos é que, para alguns de seus vértices, o ângulo ao redor desse vértice que está contido dentro do polígono é um ângulo reflexo, ou seja, um ângulo maior que 180 graus. Por esse motivo:

  • No polígono à esquerda, dizemos que (1, 1), (3, 1) são vértices reflexos (pois o ângulo dentro do polígono é um ângulo reflexo), enquanto (0, 0), (4, 0), (2, 5) são vértices regulares.
  • No polígono à direita, dizemos que (1, 1) é um vértice reflexo, enquanto todos os outros vértices são vértices regulares.

Escreva uma função que receba:

  • Um polígono descrito como uma lista de vértices, em que cada vértice se conecta ao próximo e o último se conecta ao primeiro (por exemplo, os polígonos acima são descritos por [(0, 0), (4, 0), (3, 1), (2, 5), (1, 1)] e [(0, 0), (4, 0), (3, 1), (1, 1), (2, 5)]) e ...
  • Um dos vértices do polígono.

Determina se o vértice fornecido é um vértice "regular" ou um vértice "reflex".

Exemplos (usando os polígonos representados acima)

which_side([(0, 0), (4, 0), (3, 1), (2, 5), (1, 1)], (3, 1)) ➞ "reflex"

which_side([(0, 0), (4, 0), (3, 1), (2, 5), (1, 1)], (0, 0)) ➞ "regular"

which_side([(0, 0), (4, 0), (3, 1), (1, 1), (2, 5)], (3, 1)) ➞ "regular"

which_side([(0, 0), (4, 0), (3, 1), (1, 1), (2, 5)], (1, 1)) ➞ "reflex"

Observações

  • A ordem dos vértices é importante ao especificar o polígono e, portanto, afeta se cada vértice é reflexo ou não (por exemplo, os dois polígonos acima têm exatamente os mesmos vértices, mas (3,1) é reflexo no polígono à esquerda e regular no polígono à direita).
  • Em ambos os exemplos acima, os vértices dos polígonos estão listados em ordem anti-horária, mas os testes incluirão casos em ordem horária e anti-horária.