Socorro! Meu exame de matemática está chegando em breve e eu não estudei! 1 Parte do exame é classificar um quadrilátero, considerando suas coordenadas de vértice, que eu, infelizmente, não sei como fazer. 2
Então, seu desafio é escrever um programa para fazer isso por mim, para que eu não falhe!
Desafio
Dado quatro vértices de modo que nenhum deles seja colinear, determine a classificação mais específica do quadrilátero formado por esses quatro vértices.
O que quero dizer com "classificação mais específica" é que, embora todos os quadrados sejam retângulos, se a forma for um quadrado, você deve indicar que é um quadrado e não um retângulo.
Entrada
A entrada será dada como quatro (x, y) coordenadas. Você pode considerá-las como uma lista de comprimento 4 de listas / tuplas de comprimento 2. Como alternativa, você pode receber entradas como uma lista das coordenadas x e uma lista das respectivas coordenadas y.
Por exemplo, se a minha forma tem vértices em pontos (0, 0)
, (5, 0)
, (6, 1)
, e (1, 1)
, você pode optar por tirar a entrada em um dos seguintes formatos ou algo semelhante:
[(0, 0), (5, 0), (6, 1), (1, 1)]
([0, 5, 6, 1], [0, 0, 1, 1])
Você pode assumir que o quadrilátero não é auto-interceptado e que os pontos são dados na ordem correta (ou seja, dois pontos consecutivos na entrada serão conectados por um segmento de linha no quadrilátero).
Saída
Você precisará de uma saída exclusiva para cada uma das seguintes classes de quadriláteros:
- Quadrado
- Retângulo
- Rhombus
- Paralelogramo
- Trapézio / Trapézio
- Pipa
- Quadrilátero
Pode ser o nome exato, um caractere, um número inteiro etc.
Regras
- As brechas padrão se aplicam
- Se a sua linguagem de programação possuir um built-in que executará essa tarefa exata, esse built-in não será permitido.
- Built-ins para encontrar a distância entre dois pontos são permitidos.
- São permitidos embutidos para encontrar o ângulo entre duas linhas.
Neste ponto, se você conhece todos os termos, está pronto para começar a programar! (Os casos de teste estão no final)
Terminologia
Esta seção é para quem precisa de esclarecimentos sobre as definições das diferentes formas.
Quadrado
Um quadrilátero é um quadrado se, e somente se, todos os quatro lados forem iguais em comprimento e cada par de lados adjacentes for perpendicular (ou seja, for um retângulo e um losango).
Retângulo
Um quadrilátero é um retângulo se, e somente se, cada par de lados adjacentes for perpendicular.
Rhombus
Um quadrilátero é um losango se e somente se todos os quatro lados forem iguais.
Paralelogramo
Um quadrilátero é um paralelogramo se, e somente se, cada par de lados opostos for paralelo e cada par de ângulos opostos for igual. Ambas as condições implicam uma à outra, portanto, você só precisa verificar uma delas.
Trapézio / Trapézio
Um quadrilátero é um trapézio / trapézio se e somente se tiver pelo menos um par de lados paralelos.
Pipa
Um quadrilátero é uma pipa se dois pares opostos de lados adjacentes são iguais em comprimento; isto é, dois dos seus lados adjacentes são iguais e os outros dois também são iguais.
Casos de teste
input as (x, y) * 4 -> full name
[(0, 0), (1, 0), (1, 1), (0, 1)] -> square
[(0, 0), (1, 1), (-1, 3), (-2, 2)] -> rectangle
[(0, 0), (5, 0), (8, 4), (3, 4)] -> rhombus
[(0, 0), (5, 0), (6, 1), (1, 1)] -> parallelogram
[(0, 0), (4, 0), (3, 1), (1, 1)] -> trapezoid/trapezium
[(0, 0), (1, 1), (0, 3), (-1, 1)] -> kite
[(0, 0), (2, 0), (4, 4), (0, 1)] -> quadrilateral
Links (calculadora gráfica Desmos)
Aqui estão os links para visualizações de cada um dos casos de teste.
Trapézio quadrado do paralelogramo do rombo do
retângulo / papagaio trapézio quadrilátero
Critérios Vencedores
Como não consigo trazer um computador para o exame, obviamente, preciso que você escreva o código mais curto possível para que eu possa memorizá-lo. Preciso gravá-lo nas margens e executá-lo usando o TryItOffline TM , para ajustá-lo às margens do seu programa precisa ser o menor possível!
1 Claro que sim: P
2 Claro que sim: P