Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- using namespace std;
- class Point2D {
- private:
- double x0, y0;
- public:
- double x() const {
- return x0;
- }
- double y() const {
- return y0;
- }
- };
- class Polygone
- {
- private: vector<Point2D> a;
- public:
- // Конструктор, создаёт полигон из набора точек.
- // Точки передаются в порядке обхода полигона по контуру.
- Polygone(const std::vector<Point2D>& points) //на вход конструктора подаётся const сылка на вектор, состоящий из точек
- {
- a = points; //создаётся новый вектор, в него записывается то, что находилось по переданной ссылке
- }
- // Деструктор, если нужен
- //для вектора - не нужен. У него есть свой деструктор (осторожнее с этой фразой, я сам хз, как это нормально сформулировать. На практике, вектор удаляется тогда, когда
- //выходит из области видимости. Для динамических массивов и вообще всего, что объявляется через new, деструктор нужен. Команда delete или delete[] для массивов.
- // Возвращает площадь полигона
- double area() const
- {
- double s = 0;
- for (unsigned int i = 1; i < a.size() - 1; ++i) //см. картинку и вспоминай
- 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())); //площадь как модуль скалярного произведения в координатах
- return s / 2; //не забываем поделить на 2, потому что треугольники
- }
- // Возвращает количество вершин полигона
- unsigned int size() const
- {
- return a.size();
- }
- // Возвращает N-ую вершину полигона
- // (вершины нумеруются в том же порядке, в котором были переданы)
- Point2D vertex(unsigned int N) const
- {
- return this-> a[N]; //мсье знает толк в извращениях
- }
- };
- int main() {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement