clairec icon

CSCI 40 Triangles Lab

clairec | PRO | 04/27/16 07:45:07 AM UTC | 0 ⭐ | 607 👁️ | Never ⏰ | []
C++ |

2.84 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
#include <cmath>
#include <cassert>
using namespace std;
 
class PointClass {
    public:
        void SetCoords(int x, int y);       /* Sets xCoord and yCoord values */
        double GetDistance(PointClass ptB); /* Returns distance to ptB */
        void Print();                       /* Prints "(xCoord, yCoord)\n" */
        int GetXcoord();                    /* Returns xCoord */
        int GetYcoord();                    /* Returns yCoord */
        PointClass operator+(PointClass B); /* Overloads + to add two points. 
                                               (a, b) + (c, d) = (a+b, c+d) */
    private:
        int xCoord;
        int yCoord;
};
 
class TriangleClass {
    public:
        void SetPoints(PointClass A, PointClass B, PointClass C);
        double GetArea();
        void Print();
    private:
        PointClass A;
        PointClass B;
        PointClass C;
};
 
void PointClass::SetCoords(int x, int y) {
    xCoord = x;
    yCoord = y;
}
 
double PointClass::GetDistance(PointClass ptB) {
    return sqrt( pow(xCoord - ptB.xCoord, 2) +
                 pow(yCoord - ptB.yCoord, 2) );
}
 
void PointClass::Print() {
    cout << "(" << xCoord << ", " << yCoord << ")\n";
}
 
int PointClass::GetXcoord() {
    return xCoord;
}
 
int PointClass::GetYcoord() {
    return yCoord;
}
 
PointClass PointClass::operator+(PointClass B) {
    PointClass newPoint;
    newPoint.SetCoords(xCoord + B.xCoord, yCoord + B.yCoord);
    return newPoint;
}
 
void TriangleClass::SetPoints(PointClass A, PointClass B, PointClass C) {
    this->A = A;
    this->B = B;
    this->C = C;
}
 
double TriangleClass::GetArea() {
    /* Using Heron's Formula */
    double a = A.GetDistance(B);
    double b = B.GetDistance(C);
    double c = C.GetDistance(A);
    double s = (a + b + c) / 2;
    double area = sqrt(s * (s - a) * (s - b) * (s - c));
    return area;
}
 
void TriangleClass::Print() {
    cout << "( (" << A.GetXcoord() << ", " << A.GetYcoord() << "), ";
    cout << "(" << B.GetXcoord() << ", " << B.GetYcoord() << "), ";
    cout << "(" << C.GetXcoord() << ", " << C.GetYcoord() << ") )\n";
 
}
 
 
int main() {
    PointClass ptA;
    PointClass ptB;
    PointClass ptC;
    PointClass ptD;
    TriangleClass triangleABC;
    
    ptA.SetCoords(0, 0);
    ptB.SetCoords(0, 3);
    ptC.SetCoords(4, 0);
    ptD = ptA + ptB;                     /* Using the overloaded + operator */
    
    triangleABC.SetPoints(ptA, ptB, ptC);
    
    
    assert(ptA.GetDistance(ptB) == 3);   /* Testing distance function */
    
    assert(ptD.GetXcoord() == 0);        /* Checking to see if point adding works as expected */
    assert(ptD.GetYcoord() == 3);
    
    assert(triangleABC.GetArea() == 6);  /* Testing area function */
    
    cout << "ALL TESTS PASSED!\n";
    
    return 0;
}

Comments