1 #ifndef TRIANGLE_H
2 #define TRIANGLE_H
3 #include "AbstractGeometricObject.h"
4 #include "TriangleException.h"
5 #include <cmath>
6
7 class Triangle: public GeometricObject
8 {
9 public:
10 Triangle()
11 {
12 side1 = side2 = side3 = 1;
13 }
14
15 Triangle(double side1, double side2, double side3)
16 {
17 if (!isValid(side1, side2, side3))
18 throw TriangleException(side1, side2, side3);
19
20 this->side1 = side1;
21 this->side2 = side2;
22 this->side3 = side3;
23 }
24
25 double getSide1() const
26 {
27 return side1;
28 }
29
30 double getSide2() const
31 {
32 return side2;
33 }
34
35 double getSide3() const
36 {
37 return side3;
38 }
39
40 void setSide1(double side1)
41 {
42 if (!isValid(side1, side2, side3))
43 throw TriangleException(side1, side2, side3);
44
45 this->side1 = side1;
46 }
47
48 void setSide2(double side2)
49 {
50 if (!isValid(side1, side2, side3))
51 throw TriangleException(side1, side2, side3);
52
53 this->side2 = side2;
54 }
55
56 void setSide3(double side3)
57 {
58 if (!isValid(side1, side2, side3))
59 throw TriangleException(side1, side2, side3);
60
61 this->side3 = side3;
62 }
63
64 double getPerimeter() const
65 {
66 return side1 + side2 + side3;
67 }
68
69 double getArea() const
70 {
71 double s = getPerimeter() / 2;
72 return sqrt(s * (s - side1) * (s - side2) * (s - side3));
73 }
74
75 private:
76 double side1, side2, side3;
77
78 bool isValid(double side1, double side2, double side3) const
79 {
80 return (side1 < side2 + side3) && (side2 < side1 + side3) &&
81 (side3 < side1 + side2);
82 }
83 };
84
85 #endif