Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // task2_2.cpp: определяет точку входа для консольного приложения.
- //
- //#include "stdafx.h"
- /*
- Вычислить площадь выпуклого n-угольника, заданного координатами своих вершин. Вначале вводится
- количество вершин, затем последовательно целочисленные координаты всех вершин в порядке обхода
- против часовой стрелки.
- n < 1000, координаты < 10000.
- Указание. Для вычисления площади n-угольника можно посчитать сумму ориентированных площадей
- трапеций под каждой стороной многоугольника.
- */
- #include <iostream>
- #include <assert.h>
- #include <math.h>
- using namespace std;
- struct Pair
- {
- Pair(int v1, int v2) :x(v1), y(v2)
- {}
- Pair() = default;
- int x;
- int y;
- };
- double spaceTriangle(Pair coord1, Pair coord2, Pair coord3)
- {
- double side12 = sqrt(pow(abs(coord1.x - coord2.x), 2) + pow(abs(coord1.y - coord2.y), 2));
- double side13 = sqrt(pow(abs(coord1.x - coord3.x), 2) + pow(abs(coord1.y - coord3.y), 2));
- double side23 = sqrt(pow(abs(coord3.x - coord2.x), 2) + pow(abs(coord3.y - coord2.y), 2));
- double halfP = (side12 + side13 + side23) / 2;
- double space = sqrt(halfP*(halfP - side12)*(halfP - side23)*(halfP - side13));
- return space;
- }
- double spaceXider(size_t N, Pair* coords)
- {
- assert(N >= 3);
- double space = 0;
- Pair coord1 = coords[0];
- for (int i = 1; i < N - 1; i++)
- {
- space += spaceTriangle(coord1, coords[i], coords[i + 1]);
- }
- return space;
- }
- void enterTask2()
- {
- int N;
- //cout << "Enter N" << endl;
- cin >> N;
- Pair* coords = new Pair[N];
- for (int i = 0; i < N; i++)
- {
- //cout << "Enter x y" << endl;
- cin >> coords[i].x;
- cin >> coords[i].y;
- }
- cout << spaceXider(N, coords);
- delete[] coords;
- }
- int main()
- {
- enterTask2();
- //system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement