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

Формула, которая вычисляет площадь многоугольника по его вершинам

14.04.2018, 16:52. Показов 16164. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу никак понять как правильно создать формулу. Без нее работает, а с ней никак не получается можете пожалуста исправить ошибку, я не могу понять что не так!


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
// ConsoleApplication26.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
#include <cmath>
float plo(float x, float y)
{
    float p;
    int i, j,n=5;
    for ( i = 0; i < n; ++i) {
         j = (i + 1) % n;
        return p += sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]));
    }
 
}
int main()
{
    const int n = 5;
    double p = 0;
    double x[] = { 2.0, 3.0, 6.0, 6.0, 4.0 };
    double y[] = { 3.0, 6.0, 5.0, 2.0, 1.0 };
    cout << " 2.0, 3.0, 6.0, 6.0, 4.0 \n 3.0, 6.0, 5.0, 2.0, 1.0 \n ";
    p = plo(x[],y[]);
    std::cout << "Perimeter: " << p << std::endl;
    system("pause");
    return 0;
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2018, 16:52
Ответы с готовыми решениями:

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

Площадь многоугольника по вершинам
var x , y:arrayof real ; n , i :integer; s , s1 :real ; begin read(n); for I:=1 to n do begin read(x , y) ; //введем координаты...

Создайте функцию circle (), которая вычисляет длину и площадь круга по его радиусу
Создайте функцию circle (), которая вычисляет длину и площадь круга по его радиусу. Продемонстрируйте использование этой функции в...

10
2 / 2 / 0
Регистрация: 11.05.2017
Сообщений: 46
14.04.2018, 22:20
Странная у вас формула для площади многоугольника
0
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 44
14.04.2018, 22:22  [ТС]
Изначально она была такая.
C++
1
2
3
for (int i = 0; i < n-1; ++i)
    p += sqrt((x[i] - x[i+1])*(x[i] - x[i+1]) + (y[i] - y[i+1])*(y[i] - y[i+1]));
p += sqrt((x[0] - x[n-1])*(x[0] - x[n-1]) + (y[0] - y[n-1])*(y[0] - y[n-1]));
0
2 / 2 / 0
Регистрация: 11.05.2017
Сообщений: 46
14.04.2018, 22:54
Площадь многоугольника, заданного координатами своих вершин, в порядке их обхода по часовой стрелке
будет выглядеть примерно так:
Пусть (х1, y1), (x2, у2), …, (хN,уN) —координаты вершин заданного многоугольника в порядке обхода по или против часовой стрелки. Тогда его ориентированная площадь S будет равна:
S= 1/2 * (x1y2 - y1x2 + x2y3 - y2x3 +.....+ xny1 - ynx1)
Соответственно в вашей программе достаточно ввести массив с координатами, которые будут связаны попарно
C++
1
double coordinates[6] = {0.6,2.1,1.8,3.6,2.2,2.3}
Добавлено через 9 минут
Стоит учитывать, что точек и вершин будет разное количество. В моем примере треугольник, 3 вершины соответственно 6 координат.Для наглядности:
x1 = 0.6
y1 = 2.1
x2 = 1.8
y2 = 3.6
x3 = 2.2
y3 = 2.3
Затем, действуя по формуле , используя цикл можно посчитать площадь.
0
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 44
14.04.2018, 23:11  [ТС]
А как сама функцию будет выглядеть?
0
2 / 2 / 0
Регистрация: 11.05.2017
Сообщений: 46
14.04.2018, 23:50
Отталкиваясь от вашего кода, то смею предположить, что у вас координаты заданы, следовательно код будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h" // тут все понятно
#include <iostream> // тут все понятно
#include <iomanip> // тут все понятно
#include <cmath> // тут все понятно
#include <conio.h> // тут все понятно
using namespace std; // тут все понятно
 
int main() {
    int n = ?; // число вершин
    double summ1 = 0; // сумма координат один
    double summ2 = 0; // сумма координат два
    double coordinates[?] = {}; // массив координат
    summ1 =((coordinates[?] * coordinates[?]) + (coordinates[?] * coordinates[?])); // расчет суммы по формуле
    summ2 =((coordinates[?] * coordinates[?]) + (coordinates[?] * coordinates[?])); // расчет суммы по формуле
    printf("%f",fabs((summ1-summ2)/2)); // вывод суммы fabs - модуль
    return 0; // конец программы
}
Теперь, поясняю:
n - кол-во вершин
coordinates[?] - координаты вершин, которые я описал выше, ? - здесь это n*2
Расписал вам без цикла, чтобы вы поняли как работать с формулой:
представьте ваши координаты в виде небольшой таблицы:

x ______y
x1_____y1
x2_____y2
x3_____y3
...______...
xn_____yn

summ1 = x1*y2 + x2*y3 +...+ xn*yn
summ2 = y1*x2 + y2*x3 +...+ yn*xn
Посмотрите в интернете Формулу площади Гаусса, для большего понимания.
https://ru.wikipedia.org/wiki/... 1%81%D0%B0

C++
1
printf("%f",fabs((summ1-summ2)/2)); //высчитываем модуль числа
эта строчка нужна чтобы получить площадь, зависит от того как вы занесли вершины(по часовой стрелке или нет).
0
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 44
15.04.2018, 00:06  [ТС]
А формула как будет выглядеть?
0
2 / 2 / 0
Регистрация: 11.05.2017
Сообщений: 46
15.04.2018, 00:36
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h" // тут все понятно
#include <iostream>// тут все понятно
#include <iomanip>// тут все понятно
#include <cmath>// тут все понятно
#include <conio.h>// тут все понятно
using namespace std;// тут все понятно
 
int main() {
    int n = 3; // число вершин
    double summ1 = 0;
    double summ2 = 0;
    double coordinates[6] = {2, 4, 3, -8, 1, 2};
    summ1 =((coordinates[0] * coordinates[3]) + (coordinates[2] * coordinates[5]));
    summ2 =((coordinates[1] * coordinates[2]) + (coordinates[3] * coordinates[4]));
    printf("%f",fabs((summ1-summ2)/2));
    _getch();
    return 0;
}
Пример с треугольником, координаты вершин которого (2,4), (3,-8), и (1,2)

Добавлено через 49 секунд
Формула приведена выше. Данная программа считает ПЛОЩАДЬ многоугольника, ваш же код содержал формулу ПЕРИМЕТРА.

Добавлено через 6 минут
Для периметра все описано в данной теме: Найти периметр многоугольника заданного координатами вершин

Добавлено через 21 минуту
Ну а на будущее: чуть пониже есть список тем с ответами, вот ваша: Вычислить площадь многоугольника с использованием функции,которая определяет площадь по координатам его вершин
0
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 44
15.04.2018, 01:37  [ТС]
А как оформить правильно формулу?
0
2 / 2 / 0
Регистрация: 11.05.2017
Сообщений: 46
15.04.2018, 10:21
Как вам угодно, главное чтобы видно было, что все выполняется строго по формуле. Мой код простейший, где все вы вбиваете от руки, можете изменить его как угодно вам. Думаю вся информация у вас есть. Удачи!
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
05.05.2018, 22:57
Цитата Сообщение от Artemqqqqa Посмотреть сообщение
Пусть (х1, y1), (x2, у2), …, (хN,уN) —координаты вершин заданного многоугольника в порядке обхода по или против часовой стрелки. Тогда его ориентированная площадь S будет равна: S= 1/2 * (x1y2 - y1x2 + x2y3 - y2x3 +.....+ xny1 - ynx1)
Anna584, здравствуйте! Вот решение согласно информации выше:

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
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    int n, sum;
    cout << "Enter a number of vertices:\n";
    cout << "n = ";
    cin >> n;
    struct Polygon {
        int x;
        int y;
    } coords[n];
    cout << "Enter coords:\n";
    for (int i = 0; i < n; i++) {
        cin >> coords[i].x >> coords[i].y;
    }
    coords[n].x = coords[0].x;
    coords[n].y = coords[0].y;
    sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += (coords[i-1].x * coords[i].y - coords[i-1].y * coords[i].x);
    }
    cout.precision(2);
    cout << "Target info: " << fixed << abs((double) sum / 2) << "\n";
    system("pause");
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2018, 22:57
Помогаю со студенческими работами здесь

Написать процедуру, которая вычисляет объем и площадь поверхности параллелепипеда по величинам его ребер
я толком то в программировании ничего не шарю, очень нужна помощь!!! 1. Написать функцию, которая вычисляет значение &quot;a&quot; в...

Написать программу, которая вычисляет площадь треугольника, если известны координаты его углов
Написать программу, которая вычисляет площадь треугольника, если известны координаты его углов. Координаты углов вводить с клавиатуры.

Написать программу, которая вычисляет площадь треугольника если известны координаты его вершин
Написать программу, которая вычисляет площадь треугольника если известны координаты его вершин?

Найти площадь треугольника по его вершинам
Пожалуйста перепишите данную программу с Паскаля program Ploshad; uses crt; var x1,y1,x2,y2,x3,y3,a,b,c,p,s:real; BEGIN ...

Написать функцию, которая вычисляет объём и площадь поверхности цилиндра. Входными данными являются радиус цилиндра и его высота
Написать функцию, которая вычисляет объём и площадь поверхности цилиндра. Входными данными являются радиус цилиндра и его высота


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru