Найти площадь многоугольника.

Пример 1:

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

Решение от преподавателя:

#include
#include
#include
#include
#include
using namespace std;

int const Nmax=20;

class DinArr
{
unsigned n;
float *DA1;
float *DA2;
public:

DinArr(int size)
{
if (size<1 || size>Nmax)
n=Nmax/2;
else n=size;
DA1=new float [n];
DA2=new float [n];
}

void MyDef()//ввод массива
{ for(int i=0; i{
cout<<"Enter x["<cin>>(*(DA1+i));
cout<<"Enter y["<cin>>(*(DA2+i));
}
}

void Show()//вывод массива
{
cout<float *p;
float *q;
int i=0;
for(p=DA1, q=DA2, i; p<=DA1+n-1, q<=DA2+n-1, i{
cout<<"A"<printf("%5.2f,%5.2f", *p, *q);
cout<<")";
cout<}
};

void SSS()
{
float S=0;
for(int i=0; i{
if(i==n-1)
S=S+(DA1[i]+DA1[0])*(DA2[i]-DA2[0]);
else
S=S+(DA1[i]+DA1[i+1])*(DA2[i]-DA2[i+1]);
};
cout<<"Area="<}

~DinArr()
{
cout<<"\nThe destructor deletes array\n" ;
getch();
delete []DA1;
delete []DA2;
}

};

int main()

{
unsigned n;
cout<<"Enter n=";
cin>>n;
DinArr Ob1(n);
Ob1.MyDef();
Ob1.SSS();
Ob1.Show();
getch();
}

Пример 2:

Многоугольник задан координатами своих вершин. Найдите площадь этого многоугольника.

Решение от преподавателя:

#include
#include
using namespace std;

//9.Найти площадб многоугольника

class Plane {

private:

int size;
int* x;
int* y;

public:

Plane(int s): size(s) {
x = new int[s];
y = new int[s];
}

int getSize() {
return size;
}

void printPoints() {
for(int i = 0; i < size; i++) {
cout << "(" << x[i] << ":" << y[i] << ")" << " ";
}
cout << endl;
}

double countTriangleArea(int numb, int numb2, int numb3) {
double a = countDistance(numb, numb2);
double b = countDistance(numb2, numb3);
double c = countDistance(numb3, numb);
double p = (a + b + c)/2;
double area = sqrt(p*(p - a)*(p - b)*(p - c));
return area;
}

double countPolygonArea() {
double area = 0;
for(int i = 0; i < size - 2; i++) {
area += countTriangleArea(0, (i + 1), (i + 2));
}
return area;
}

void readPoints() {
for(int i = 0; i < size; i++) {
cout << "Введите координаты x" << i << ": ";
cin >> x[i];
cout << "Введите координаты y" << i << ": ";
cin >> y[i];
}
}

double countDistance(int numb, int numb2) { //numb - порядковый номер в массиве
double dist = sqrt((pow((x[numb]-x[numb2]), 2)) + (pow((y[numb]-y[numb2]),2)));
return dist;
}

~Plane() {
cout << "Destructor destroy array" << endl;
delete[] x;
delete[] y;
}

};

int main() {
setlocale(LC_ALL,".1251");
srand(time(NULL));
Plane plane(3);
plane.readPoints();
plane.printPoints();
double area = plane.countPolygonArea();
cout << "Площадь заданного " << plane.getSize() << "-угольника: " << area << endl;
return 0;
}

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн