Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. // task2_2.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. //#include "stdafx.h"
  5. /*
  6. ​Вычислить площадь выпуклого n-угольника, заданного координатами своих вершин. Вначале вводится
  7.  
  8. количество вершин, затем последовательно целочисленные координаты всех вершин в порядке обхода
  9.  
  10. против часовой стрелки.
  11.  
  12. n < 1000, координаты < 10000.
  13.  
  14. Указание. Для вычисления площади n-угольника можно посчитать сумму ориентированных площадей
  15.  
  16. трапеций под каждой стороной многоугольника.
  17. */
  18. #include <iostream>
  19. #include <assert.h>
  20. #include <math.h>
  21. using namespace std;
  22. struct Pair
  23. {
  24. Pair(int v1, int v2) :x(v1), y(v2)
  25. {}
  26. Pair() = default;
  27. int x;
  28. int y;
  29. };
  30. double spaceTriangle(Pair coord1, Pair coord2, Pair coord3)
  31. {
  32. double side12 = sqrt(pow(abs(coord1.x - coord2.x), 2) + pow(abs(coord1.y - coord2.y), 2));
  33. double side13 = sqrt(pow(abs(coord1.x - coord3.x), 2) + pow(abs(coord1.y - coord3.y), 2));
  34. double side23 = sqrt(pow(abs(coord3.x - coord2.x), 2) + pow(abs(coord3.y - coord2.y), 2));
  35. double halfP = (side12 + side13 + side23) / 2;
  36. double space = sqrt(halfP*(halfP - side12)*(halfP - side23)*(halfP - side13));
  37. return space;
  38. }
  39.  
  40. double spaceXider(size_t N, Pair* coords)
  41. {
  42. assert(N >= 3);
  43. double space = 0;
  44. Pair coord1 = coords[0];
  45. for (int i = 1; i < N - 1; i++)
  46. {
  47. space += spaceTriangle(coord1, coords[i], coords[i + 1]);
  48. }
  49. return space;
  50.  
  51. }
  52.  
  53. void enterTask2()
  54. {
  55. int N;
  56. //cout << "Enter N" << endl;
  57. cin >> N;
  58. Pair* coords = new Pair[N];
  59. for (int i = 0; i < N; i++)
  60. {
  61. //cout << "Enter x y" << endl;
  62. cin >> coords[i].x;
  63. cin >> coords[i].y;
  64. }
  65. cout << spaceXider(N, coords);
  66. delete[] coords;
  67. }
  68. int main()
  69. {
  70. enterTask2();
  71. //system("pause");
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement