Advertisement
NikitaShigaev

Untitled

May 1st, 2020
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. class Point2D {
  7. private:
  8.     double x0, y0;
  9. public:
  10.     double x() const {
  11.         return x0;
  12.     }
  13.     double y() const {
  14.         return y0;
  15.     }
  16. };
  17.  
  18. class Polygone
  19. {
  20. private: vector<Point2D> a;
  21. public:
  22.     // Конструктор, создаёт полигон из набора точек.
  23.     // Точки передаются в порядке обхода полигона по контуру.
  24.     Polygone(const std::vector<Point2D>& points) //на вход конструктора подаётся const сылка на вектор, состоящий из точек
  25.     {
  26.         a = points;   //создаётся новый вектор, в него записывается то, что находилось по переданной ссылке
  27.     }
  28.  
  29.     // Деструктор, если нужен
  30.     //для вектора - не нужен. У него есть свой деструктор (осторожнее с этой фразой, я сам хз, как это нормально сформулировать. На практике, вектор удаляется тогда, когда
  31.     //выходит из области видимости. Для динамических массивов и вообще всего, что объявляется через new, деструктор нужен. Команда delete или delete[] для массивов.
  32.    
  33.     // Возвращает площадь полигона
  34.     double area() const
  35.     {
  36.         double s = 0;
  37.         for (unsigned int i = 1; i < a.size() - 1; ++i) //см. картинку и вспоминай
  38.             s += abs(( a[i].x() - a[0].x()) * (a[i + 1].y() - a[0].y()) - (a[i].y() - a[0].y()) * (a[i + 1].x() - a[0].x())); //площадь как модуль скалярного произведения в координатах
  39.         return s / 2;  //не забываем поделить на 2, потому что треугольники
  40.     }
  41.  
  42.     // Возвращает количество вершин полигона
  43.     unsigned int size() const
  44.     {
  45.         return a.size();
  46.     }
  47.  
  48.     // Возвращает N-ую вершину полигона
  49.     // (вершины нумеруются в том же порядке, в котором были переданы)
  50.     Point2D vertex(unsigned int N) const
  51.     {
  52.         return this-> a[N];  //мсье знает толк в извращениях
  53.     }
  54. };
  55.  
  56. int main() {
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement