Форум программистов, компьютерный форум CyberForum.ru

найти площадь многоугольника - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
09.02.2014, 16:34     найти площадь многоугольника #1
найти площадь многоугольника по заданным точкам его вершин(точки, даны по обходу многоугольника по часовой стрелке).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
10.02.2014, 16:58     найти площадь многоугольника #2
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
 
int main()
{
  const size_t countPair = 3;
  int x, y, S = 0;
  std::vector< std::pair <int, int> > polygon(countPair);
  
  for(size_t i = 0; i < countPair; ++i)
  {
     std::cout << "Input coordination X : ";  std::cin >> x;
     std::cout << "Input coordination Y : ";  std::cin >> y;
     polygon.push_back(std::pair <int, int>(x, y));  
  }
  
  for(size_t i = 0; i < polygon.size(); ++i)
  {
    if(i != polygon.size() - 1)
     S += (polygon[i].first * polygon[i + 1].second - polygon[i].second * polygon[i + 1].first);
    else
     S += (polygon[i].first * polygon[0].second - polygon[i].second * polygon[0].first);        
  }
  
  std::cout << " S = " << abs(S) << std::endl;
  
  system("PAUSE");
  return 0;
}
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.02.2014, 17:48  [ТС]     найти площадь многоугольника #3
можете рассказать алгоритм нахождения вкраце?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
10.02.2014, 17:58     найти площадь многоугольника #4
x1y1; x2y2; x3y3 .. xNyN
s = 1/2 *(x1*y2 - x2*y1 + ... + xN*y1 - xN*y1);

у меня ошибка небольшая
замените строку
C++
1
 std::cout << " S = " << abs(S) << std::endl;
на
C++
1
 std::cout << " S = " << (abs(S) * 0.5)<< std::endl;
Добавлено через 2 минуты
Единственное ограничение стороны многоугольника не должны пересикатся
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
15.02.2014, 17:59  [ТС]     найти площадь многоугольника #5
x1y1; x2y2; x3y3 .. xNyN
s = 1/2 *(x1*y2 - x2*y1 + ... + xN*y1 - xN*y1);


там точно xN*y1-xN*y1, почему в начале тогда на y2 умножаем?НЕ совсем просто алгоритм понимаю
Yandex
Объявления
15.02.2014, 17:59     найти площадь многоугольника
Ответ Создать тему
Опции темы

Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru