Seu objetivo é determinar se um determinado ponto 2D X está dentro da área do triângulo com os vértices A, B, C.
Escreva uma função que considere as coordenadas do ponto de teste X e os três vértices do triângulo (totalizando 8 coordenadas) e retorne True se o ponto estiver dentro desse triângulo e False se estiver fora.
Não se preocupe com casos extremos. Se o ponto estiver no limite do triângulo (aresta ou vértice) ou se o triângulo for realmente um segmento de linha, seu código poderá fazer o que for, incluindo travamentos. Também não se preocupe com estabilidade numérica ou precisão de ponto flutuante.
Seu código deve ser uma função nomeada. Trechos de código não serão aceitos.
Menos personagens ganham.
Entrada:
Oito números reais representando coordenadas. Os números estarão no intervalo (-1,1)
.
O formato exato de entrada é flexível. Você pode, por exemplo, coletar oito números, uma lista de oito números, uma lista de quatro pontos, cada uma dada por uma tupla, uma matriz 2 * 4, quatro números complexos, duas listas das coordenadas xe coordenadas y, e assim por diante.
A entrada precisa ser apenas os números em algum contêiner, sem dados adicionais. Você não pode usar a entrada para executar qualquer pré-processamento, nem pode exigir restrições na entrada, como exigir que os pontos sejam dados em coordenadas y ascendentes. Sua entrada deve permitir oito coordenadas (embora seu código possa se comportar arbitrariamente nos casos extremos mencionados anteriormente).
Por favor, indique o seu formato de entrada.
Saída:
O booleano True
/ correspondente False
, o número correspondente 1
/ 0
ou os análogos no seu idioma.
Casos de teste
As entradas recebem uma lista [X,A,B,C]
de quatro tuplas, primeiro o ponto de teste e depois os três vértices do triângulo. Eu os agrupei naqueles cujas saídas deveriam ser True
e aquelas que deveriam ser False
.
True
instâncias:
[(-0.31961, -0.12646), (0.38478, 0.37419), (-0.30613, -0.59754), (-0.85548, 0.6633)]
[(-0.87427, -0.00831), (0.78829, 0.60409), (-0.90904, -0.13856), (-0.80685, 0.48468)]
[(0.28997, -0.03668), (-0.28362, 0.42831), (0.39332, -0.07474), (-0.48694, -0.10497)]
[(-0.07783, 0.04415), (-0.34355, -0.07161), (0.59105, -0.93145), (0.29402, 0.90334)]
[(0.36107, 0.05389), (0.27103, 0.47754), (-0.00341, -0.79472), (0.82549, -0.29028)]
[(-0.01655, -0.20437), (-0.36194, -0.90281), (-0.26515, -0.4172), (0.36181, 0.51683)]
[(-0.12198, -0.45897), (-0.35128, -0.85405), (0.84566, 0.99364), (0.13767, 0.78618)]
[(-0.03847, -0.81531), (-0.18704, -0.33282), (-0.95717, -0.6337), (0.10976, -0.88374)]
[(0.07904, -0.06245), (0.95181, -0.84223), (-0.75583, -0.34406), (0.16785, 0.87519)]
[(-0.33485, 0.53875), (-0.25173, 0.51317), (-0.62441, -0.90698), (-0.47925, 0.74832)]
False
instâncias:
[(-0.99103, 0.43842), (0.78128, -0.10985), (-0.84714, -0.20558), (-0.08925, -0.78608)]
[(0.15087, -0.56212), (-0.87374, -0.3787), (0.86403, 0.60374), (0.01392, 0.84362)]
[(0.1114, 0.66496), (-0.92633, 0.27408), (0.92439, 0.43692), (0.8298, -0.29647)]
[(0.87786, -0.8594), (-0.42283, -0.97999), (0.58659, -0.327), (-0.22656, 0.80896)]
[(0.43525, -0.8923), (0.86119, 0.78278), (-0.01348, 0.98093), (-0.56244, -0.75129)]
[(-0.73365, 0.28332), (0.63263, 0.17177), (-0.38398, -0.43497), (-0.31123, 0.73168)]
[(-0.57694, -0.87713), (-0.93622, 0.89397), (0.93117, 0.40775), (0.2323, -0.30718)]
[(0.91059, 0.75966), (0.60118, 0.73186), (0.32178, 0.88296), (-0.90087, -0.26367)]
[(0.3463, -0.89397), (0.99108, 0.13557), (0.50122, -0.8724), (0.43385, 0.00167)]
[(0.88121, 0.36469), (-0.29829, 0.21429), (0.31395, 0.2734), (0.43267, -0.78192)]