Написать формулу по вычислению площади многоугольника с определенным рядом условий

163
22 апреля 2022, 04:10

Я новичок в плюсах. Вводится количество вершин многоугольника. Нужно вычислить его площадь:

  1. Фигура разбивается на N-2 треугольников (вершины совпадают с вершинами многоугольника) (N - кол-во вершин)
  2. Вершины могут соединяться с НЕсоседними вершинами
  3. Сумма площадей этих треугольников - и есть сумма многоугольника Помогите написать формулу, на данный момент имеется только очень малая часть кода
class Point
{
public:
  double x;
  double y;
  Point(){};
  void init() {
      cout << "Введите x\n";
      cin >> x;
      cout << "Введите y\n";
      cin >> y;
  }
};
class Polygon
{
    private:
        int n;
    public:
        Polygon(int n):n(n){};
        Point *p = new Point[n];
        void init() {
            for (int i = 0; i < n; i++) {
                p[i].init();
            }
        }
};
Answer 1

Можешь использовать формулу площади Гаусса, она довольно простая как в понимании, так и в реализации.

Ниже я привел пример кода, но рекомендую для начала ознакомиться с самой формулой, попробовать ее самому реализовать и потом уже сверить с моим кодом.

#include <iostream>
using namespace std;
class Point
{
public:
  double x;
  double y;
  Point(){};
  void init() {
      cout << "Введите x\n";
      cin >> x;
      cout << "Введите y\n";
      cin >> y;
  }
};
class Polygon
{
    private:
        int n;
    public:
        Polygon(int n):n(n){};
        Point *p = new Point[n];
        void init() {
            for (int i = 0; i < n; i++) {
                p[i].init();
            }
        }
        double square(){
            double t = 0;
            for(int i = 0; i < n - 1; ++i){
                t += p[i].x * p[i + 1].y;
                t -= p[i].y * p[i + 1].x;
            }
            t = t + p[n - 1].x * p[0].y - p[n - 1].y * p[0].x;
            if(t < 0) t = -t; //можно функцию из cmath или math.h использовать fabs()
            return t / 2;
        }
};

int main(){
    Polygon pol(5);
    pol.init();
    cout << pol.square();
    return 0;
}
Answer 2

просмотрите эту страницу в википедии https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0_%D0%BF%D0%BB%D0%BE%D1%89%D0%B0%D0%B4%D0%B8_%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%B0

READ ALSO
С++, матрица, задача

С++, матрица, задача

Помогите, пожалуйста, создать программу на базе с++Разбираюсь второй день - уже голова от этих матриц болит

172
C++. Простая задача

C++. Простая задача

Задача: Составить алгоритм увеличения всех трех, введённых с клавиатуры, переменных на 5,если среди них есть хотя бы две равныеВ противном...

124
Небольшая проблема с выравниванием чисел по правому краю. C++

Небольшая проблема с выравниванием чисел по правому краю. C++

У меня есть последовательность чисел, которая разбивается на строкиКол-во строк зависит от кол-ва чисел(выбирается рандомно в диапазоне...

121
Как реализовать циклический сдвиг слова в C++

Как реализовать циклический сдвиг слова в C++

Допустим имеется слово "элемент"(слово может быть любым), нужно циклически сдвинуть слово вправо на "n" символовНапример, на 3 символа...

88