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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 28
#1

Площадь многоугольника - C++

04.10.2015, 20:41. Просмотров 330. Ответов 3
Метки нет (Все метки)

Всем добрый вечер!
Есть задача:
Заданы координаты n последовательных вершин многоугольника. Определить его площадь.

Входные данные

Первая строка содержит количество вершин многоугольника n. В следующих n строках через пробел заданы целочисленные координаты его последовательных вершин xi, yi. Известно, что 3 ≤ n ≤ 1000, -1000 ≤ x[i], y[i] ≤ 1000`.

Выходные данные

Площадь многоугольника S, вычисленная с точностью до трех десятичных знаков.

Написал код под нее, но выдает не тот ответ.
Подскажите пожалуйста, где я напортачил?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main() {
    unsigned int n, i;
    int x[1000], y[1000];
    double sum = 0, s;
    cin >> n;
    for (int i = 1; i<n; ++i) {
        for (int i = 1; i<n - 1; ++i) {
        }
        cin >> x[i] >> y[i];
        sum += abs((x[i] + x[(i + 1)]) * (y[i] + y[(i + 1)]));
    }
    cin >> sum;
    s = sum * 0.5;
    cout << fixed << setprecision(3) << s << endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2015, 20:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Площадь многоугольника (C++):

Вычислить площадь многоугольника с использованием функции,которая определяет площадь по координатам его вершин - C++
Народ помогите пож нужно очень срочно. совсем запутался с этим задание,буду благодарен за помощь. Вычислить площадь многоугольника с...

Площадь многоугольника - C++
Необходимо вычислить площади двух многоугольников(ну а в дальнейшем проверить, лежит ли один из них в другом, пока мне это не надо) по...

Площадь многоугольника - C++
Найти площадь невыпуклого многоугольника(n-угольник). Входные данные: координаты точек. На output вывести площадь.

Площадь выпуклого многоугольника - C++
Доброго времени суток! Собственно, задача звучит как: &quot;Расчет площади выпуклого многоугольника при вводимых координатах вершин&quot;. ...

Найти площадь многоугольника - C++
найти площадь многоугольника по заданным точкам его вершин(точки, даны по обходу многоугольника по часовой стрелке).

Вычислить площадь многоугольника - C++
Задача 33* Выпуклый многоугольник задан координатами своих вершин. Вершины упорядочены. Вычислить площадь многоугольника. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
PavelPol
39 / 39 / 16
Регистрация: 05.11.2014
Сообщений: 186
04.10.2015, 21:07 #2
Если честно, не пойму что за алгоритм вы пытаетесь реализовать. Площадь многоугольника - не тривиальная задача.
Решение, которое приходит мне на ум - искать площади треугольников, состоящих из отрезка n(0) - n(1) .. n(N) - n(0) и смещенных осей координат. Затем все эти площади сложить. Площади треугольников считать либо по формуле, либо методом интегрирования.

Добавлено через 9 минут
Если ничего не путаю, должно работать так:
C++
1
2
3
4
5
for (int i = 0; i<n; i++) {
        cin >> x[i] >> y[i]; if (i == 0) continue;
        sum += 1.0 / 2.0 * sqrt(pow(abs(x[i] - x[i-1]), 2.0) + 
                                         pow(abs(y[i] - y[i-1]), 2.0)) * abs(y[i] - y[i-1]);
}
Barrent
237 / 113 / 38
Регистрация: 04.05.2013
Сообщений: 337
Завершенные тесты: 2
04.10.2015, 21:25 #3
Любой выпуклый многоугольник можно разбить на треугольники следующим образом (см. вложение)
В коде это выглядит так:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "stdafx.h"
#include <Windows.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
class Point {
    //VARIABLES
    public: 
        int x;
        int y;
    //CONSTRUCTORS
    public: 
        Point(int x, int y) {           
            this->x = x;
            this->y = y;
        }
};
 
float TriangleSquare(Point& A, Point& B, Point& C);
float Distance(Point& A, Point& B);
 
int main()
{   
    //вершины выпуклого многоугольника
    const int n = 7;
    Point points[n]{ Point(0,0), Point(2,4), Point(6,5), Point(10,3), Point(11,-1), Point(7, -5), Point(3,4) };
 
    float square = 0;
    //перебор треугольников
    for (int i = 1; i < n - 1; i++) {
        square += TriangleSquare(points[0], points[i], points[i+1]);
    }
    cout << "Square: " << square << endl;
    system("pause");
    return 0;
}
 
float TriangleSquare(Point& A, Point& B, Point& C) {
    float AB = Distance(A, B);
    float BC = Distance(B, C);
    float AC = Distance(A, C);
    float p = (AB + BC + AC) / 2;               //половина периметра
    return sqrt(p*(p - AB)*(p - BC)*(p - AC));  //Герон
}
 
float Distance(Point& A, Point& B) {
    return sqrt(pow(A.x - B.x, 2) + pow(A.y - B.y, 2)); 
}
Миниатюры
Площадь многоугольника  
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 28
04.10.2015, 21:52  [ТС] #4
Цитата Сообщение от PavelPol Посмотреть сообщение
Если честно, не пойму что за алгоритм вы пытаетесь реализовать. Площадь многоугольника - не тривиальная задача.
Решение, которое приходит мне на ум - искать площади треугольников, состоящих из отрезка n(0) - n(1) .. n(N) - n(0) и смещенных осей координат. Затем все эти площади сложить. Площади треугольников считать либо по формуле, либо методом интегрирования.
Добавлено через 9 минут
Если ничего не путаю, должно работать так:
Код C++Выделить код
1
2
3
4
5
for (int i = 0; i<n; i++) {
* * * * cin >> x[i] >> y[i]; if (i == 0) continue;
* * * * sum += 1.0 / 2.0 * sqrt(pow(abs(x[i] - x[i-1]), 2.0) +
* * * * * * * * * * * * * * * * * * * * *pow(abs(y[i] - y[i-1]), 2.0)) * abs(y[i] - y[i-1]);
}
К сожалению, все равно неправильно считает
Ответ не тот и появилась еще одна графа ввода
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2015, 21:52
Привет! Вот еще темы с ответами:

Вычислить площадь многоугольника - C++
Не могу понять почему VS 2015 всегда показывает площадь равную 0, в то время как dev C++ вычисляет её нормально. ...

Вычислить площадь простого многоугольника - C++
В первой строке вводится одно число N (3≤N≤100000). Далее в N строках задается по паре чисел – координаты очередной вершины простого...

Найти площадь вогнутого многоугольника - C++
пожалуйста, народ, помогите (подскажите) как найти площадь вогнутого многоугольника? при условии,что вершин больше 3.

Площадь выпуклого многоугольника методом триангуляции - C++
ребят помогите разработать программу для расчёта площади выпуклого многоугольника методом триангуляции (разбиения на треугольники) по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.10.2015, 21:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru