polygon.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include "geometry.h"
  3. class Polygon_exception {
  4. };
  5. class Polygon :
  6. public Geometry_figure
  7. {
  8. private:
  9. vector <Point> points;
  10. vector <double> sides;
  11. void calc_sides();
  12. public:
  13. Polygon();
  14. template <class value_class> Polygon(vector <value_class> coords);
  15. template <> Polygon(vector <Point> coords);
  16. double calc_area();
  17. double calc_perimeter();
  18. void name();
  19. };
  20. template<class value_class>
  21. inline Polygon::Polygon(vector<value_class> coords)
  22. {
  23. int coor_size = coords.size();
  24. if (coor_size % 2 != 0 && coor_size < 4) {
  25. cout << "Array size is not enough";
  26. throw Polygon_exception();
  27. }
  28. else {
  29. for (int i = 0; i < coor_size-1; i+=2)
  30. points.push_back(Point(coords[i], coords[i + 1]));
  31. calc_sides();
  32. }
  33. }
  34. template<>
  35. inline Polygon::Polygon(vector<Point> coords) {
  36. int coor_size = coords.size();
  37. if (coor_size % 2 != 0 && coor_size < 2) {
  38. cout << "Array size is not enough";
  39. throw Polygon_exception();
  40. }
  41. else {
  42. for (int i = 0; i < coor_size; i++)
  43. points.push_back(coords[i]);
  44. calc_sides();
  45. }
  46. }