#include <vector>
#include <iostream>
#include <algorithm> // sort
// Function to calculate the squared distance between two points
int distanceSquared(std::pair<int, int> p1, std::pair<int, int> p2) {
return (p1.first - p2.first) * (p1.first - p2.first) +
(p1.second - p2.second) * (p1.second - p2.second);
}
// Function to check if four points form a square
bool isSquare(std::pair<int, int> p1, std::pair<int, int> p2, std::pair<int, int> p3, std::pair<int, int> p4) {
std::vector<int> distances = {
distanceSquared(p1, p2), distanceSquared(p1, p3), distanceSquared(p1, p4),
distanceSquared(p2, p3), distanceSquared(p2, p4), distanceSquared(p3, p4)
};
// Sort distances to group equal ones
sort(distances.begin(), distances.end());
// Check conditions for a square
return distances[0] > 0 && // Non-zero side length
distances[0] == distances[1] && distances[1] == distances[2] && distances[2] == distances[3] && // Four equal sides
distances[4] == distances[5] && // Two equal diagonals
distances[4] == 2 * distances[0]; // Diagonal is √2 times the side length
}
int main() {
std::pair<int, int> p1 = {0, 0}, p2 = {0, 2}, p3 = {2, 0}, p4 = {2, 2};
if (isSquare(p1, p2, p3, p4)) {
std::cout << "The points form a square." << std::endl;
} else {
std::cout << "The points do not form a square." << std::endl;
}
}
/*
run:
The points form a square.
*/