Write a function which takes as parameter 3 points and tell whether these
points are the coordinates of isosceles or equilateral or right angled or scalene
triangle. NOTE “Make separate functions as isEquilateral, isRightAngled and
so on... ”.
Sample Input: P1 0 0
P2 1 0
P3 1 1
Sample Output: Right Angle Triangle
#include <iostream>
#include <cmath>
using namespace std;
const double EPS=1e-12;
struct Point {
double x;
double y;
};
double distance(Point p1, Point p2) {
return sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
}
bool isEqual(double x, double y) {
return abs(x-y) < EPS;
}
bool isIsosceles(Point p1, Point p2, Point p3) {
double s1 = distance(p1, p2);
double s2 = distance(p1, p3);
double s3 = distance(p2, p3);
if ( isEqual(s1, s2) && !isEqual(s1, s3))
return true;
if ( isEqual(s2, s3) && !isEqual(s2, s1))
return true;
if ( isEqual(s3, s1) && !isEqual(s3, s2))
return true;
return false;
}
bool isEquilateral(Point p1, Point p2, Point p3) {
double s1 = distance(p1, p2);
double s2 = distance(p1, p3);
double s3 = distance(p2, p3);
if (isEqual(s1, s2) && isEqual(s2, s3))
return true;
return false;
}
bool isRightAngled(Point p1, Point p2, Point p3) {
double s1 = distance(p1, p2);
double s2 = distance(p1, p3);
double s3 = distance(p2, p3);
if (isEqual(s1*s1 + s2*s2, s3*s3) ||
isEqual(s2*s2 + s3*s3, s1*s1) ||
isEqual(s3*s3 + s1*s1, s2*s2) )
return true;
return false;
}
int main() {
Point p1, p2, p3;
cout << "P1 ";
cin >> p1.x >> p1.y;
cout << "P2 ";
cin >> p2.x >> p2.y;
cout << "P3 ";
cin >> p3.x >> p3.y;
cout << endl;
if (isIsosceles(p1, p2, p3)) {
cout << "Isosceles Triangle" << endl;
}
if (isEquilateral(p1, p2, p3)) {
cout << "Equilateral Triangle" << endl;
}
if (isRightAngled(p1, p2, p3)) {
cout << "Right Angle Triangle" << endl;
}
}
Comments
Leave a comment