Here is my solution to the Programming Praxis exercise from Jan. 2, 2013. The solution is written in C++.
The task:
Your task is to write a function that determines if four input points determine a square.
My solution:
// Author: William Clausen
//
// Date: 1/2/13
//
// Programming Praxis Problem for January 2, 2013: Four points
// determine a square. Write a progam to determine if four points
// make up a square in the x-y plane.
#include <utility>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
double dist(pair <double, double> point1, pair <double, double> point2);
bool isSquare(pair <double, double> coordinates[4]);
// Four points determine a sqaure if picking any pair of points
// are the same distance apart...and two of the three distances are
// equal
bool isSquare(pair<double, double> coordinates[4])
{
// First find the distances
double dist12 = dist(coordinates[1], coordinates[2]);
double dist34 = dist(coordinates[3], coordinates[4]);
if (dist12 != dist34) return false;
double dist13 = dist(coordinates[1], coordinates[3]);
double dist24 = dist(coordinates[2], coordinates[4]);
if (dist13 != dist24) return false;
double dist14 = dist(coordinates[1], coordinates[4]);
double dist23 = dist(coordinates[2], coordinates[3]);
if (dist14 != dist23) return false;
// If the above checks pass, find the max distance and make sure
// the two smaller distances are equal.
double maxDist = max(dist12, max(dist13, dist14));
if (maxDist == dist12) {
return dist13 == dist14;
} else if (maxDist == dist13) {
return dist12 == dist14;
} else {
return dist12 == dist13;
}
}
// Helper function to determine the distance between to points in an
// x-y plane.
double dist(pair<double, double> point1, pair<double, double> point2)
{
// The distance between 2 points can be found using the pythagorean
// theorem.
double xDiff = point2.first - point1.first;
double yDiff = point2.second - point1.second;
double diffSquared = pow(xDiff, 2) + pow(yDiff, 2);
return sqrt(diffSquared);
}
// This code produced the correct output for tests provided in the
// problem statement.