Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/55: Рейтинг темы: голосов - 55, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29

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

04.10.2015, 20:41. Показов 10648. Ответов 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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2015, 20:41
Ответы с готовыми решениями:

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

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

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

3
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
04.10.2015, 21:07
Если честно, не пойму что за алгоритм вы пытаетесь реализовать. Площадь многоугольника - не тривиальная задача.
Решение, которое приходит мне на ум - искать площади треугольников, состоящих из отрезка 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]);
}
0
 Аватар для Barrent
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
04.10.2015, 21:25
Любой выпуклый многоугольник можно разбить на треугольники следующим образом (см. вложение)
В коде это выглядит так:
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)); 
}
Миниатюры
Площадь многоугольника  
0
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
04.10.2015, 21:52  [ТС]
Цитата Сообщение от 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]);
}
К сожалению, все равно неправильно считает
Ответ не тот и появилась еще одна графа ввода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2015, 21:52
Помогаю со студенческими работами здесь

Площадь многоугольника
double dlina (double ax, double ay, double bx, double by); //объявление функциирасстояния м/у двумя точками double square(double a,...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru