Написать формулу по вычислению площади многоугольника с определенным рядом условий
Я новичок в плюсах. Вводится количество вершин многоугольника. Нужно вычислить его площадь:
- Фигура разбивается на N-2 треугольников (вершины совпадают с вершинами многоугольника) (N - кол-во вершин)
- Вершины могут соединяться с НЕсоседними вершинами
- Сумма площадей этих треугольников - и есть сумма многоугольника Помогите написать формулу, на данный момент имеется только очень малая часть кода
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();
}
}
};
Ответы (2 шт):
Автор решения: E_d_u_a_r_d
→ Ссылка
просмотрите эту страницу в википедии 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
Автор решения: Павел Ериков
→ Ссылка
Можешь использовать формулу площади Гаусса, она довольно простая как в понимании, так и в реализации.
Ниже я привел пример кода, но рекомендую для начала ознакомиться с самой формулой, попробовать ее самому реализовать и потом уже сверить с моим кодом.
#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;
}