Supondo que seu quadrado possa ser rotacionado contra qualquer sistema de coordenadas que você possua, você não pode confiar na repetição de valores X e Y em seus quatro pontos.
O que você pode fazer é calcular as distâncias entre cada um dos quatro pontos. Se você achar o seguinte para ser verdade, você tem um quadrado:
-
Existem dois pontos, digamos A e C, que são distância x um do outro, e dois outros pontos, digamos B e D, que também são distância x um do outro.
-
Cada ponto {A, B, C, D} é uma distância igual dos dois pontos que não estão x de distância. Ou seja: se A estiver x longe de C, então será z longe de B e D.
A propósito, a distância z terá que ser SQRT (( x ^ 2) / 2), mas você não precisa confirmar isso. Se as condições 1 e 2 forem verdadeiras, você terá um quadrado. NOTA: Algumas pessoas estão preocupadas com a ineficiência da raiz quadrada. Eu não disse que você deveria fazer este cálculo, eu apenas disse que se você tivesse, você obteria um resultado previsível!
Omínimodetrabalhoquevocêprecisariafazerseriaescolherumponto,digamosAecalcularadistânciaparacadaumdosoutrostrêspontos.SevocêpuderacharqueAéxdeumpontoezemdoisoutrospontos,entãovocêsóprecisachecaressesdoisoutrospontosunscontraosoutros.Seelestambémsãoxumdooutro,entãovocêtemumquadrado.ouseja:
- AB=z
- AC=x
- AD=z
ComoAB=AD,verifiqueBD:
- BD=x
Sóparatercerteza,vocêprecisaverificarosoutroslados:BCeCD.
- BC=z
- CD=z
ComoAC=BDecomoAB=AD=BC=CD,esteé,portanto,umquadrado.
Aolongodocaminho,sevocêencontrarmaisdeduasdistânciasdistintas,afiguranãopodeserumquadrado,entãovocêpodeparardeprocurar.
Implementaçãodeexemplodetrabalho
Eucrieiumexemplodetrabalhonojsfiddle(veja
Agradecimentos a: meshuai, Blrfl, MSalters e Bart van Ingen Schenau por comentários úteis para melhorar esta resposta.