How to check if given four points form a square in C++

1 Answer

0 votes
#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.

*/

 



answered Sep 5, 2025 by avibootz
...