|
@@ -0,0 +1,59 @@
|
|
|
+#pragma once
|
|
|
+#include "geometry.h"
|
|
|
+
|
|
|
+class Triangle_exception{};
|
|
|
+class Triangle :
|
|
|
+ public Geometry_figure
|
|
|
+{
|
|
|
+private:
|
|
|
+ double sides[3];
|
|
|
+ void calc_sides();
|
|
|
+
|
|
|
+public:
|
|
|
+ template <class value_class> Triangle(value_class A, value_class B, value_class C);
|
|
|
+ template <class value_class> Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3 );
|
|
|
+ Triangle();
|
|
|
+ template <> Triangle(Point A, Point B, Point C);
|
|
|
+
|
|
|
+ double calc_area();
|
|
|
+ double calc_perimeter();
|
|
|
+ void name();
|
|
|
+
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+template<class value_class>
|
|
|
+inline Triangle::Triangle(value_class A, value_class B, value_class C)
|
|
|
+{
|
|
|
+
|
|
|
+ is_incorrect = (A <= 0) || (B <= 0) || (C <= 0);
|
|
|
+ sides[0] = (double)(A);
|
|
|
+ sides[1] = (double)(B);
|
|
|
+ sides[2] = (double)(C);
|
|
|
+ is_incorrect = is_incorrect || (sides[0] > sides[1] + sides[2]) || (sides[2] > sides[1] + sides[0]) || (sides[1] > sides[2] + sides[0]);
|
|
|
+ if (is_incorrect)
|
|
|
+ throw Triangle_exception();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+template<class value_class>
|
|
|
+inline Triangle::Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3)
|
|
|
+{
|
|
|
+ dots.push_back(Point(x1,y1));
|
|
|
+ dots.push_back(Point(x2, y2));
|
|
|
+ dots.push_back(Point(x3, y3));
|
|
|
+ calc_sides();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+template <>
|
|
|
+Triangle::Triangle(Point A, Point B, Point C)
|
|
|
+{
|
|
|
+ dots.push_back(A);
|
|
|
+ dots.push_back(B);
|
|
|
+ dots.push_back(C);
|
|
|
+ calc_sides();
|
|
|
+
|
|
|
+}
|