Mam taki program do wyznaczania pola wielokąta wypukłego
#include <iostream>
#include <math.h>
using namespace std;
main()
{
float Px1, Px2, Px3, Py1, Py2, Py3;
float pole;
float p;
int liczbapkt, i, x;
float tabx[20];
float taby[20];
{
cout<<"Podaj ilosc wierzcholkow wielokata wypuklego (max 20 pkt):";
cin>>liczbapkt;
cout<<"\n";
if (liczbapkt<3) cout<<"Podaj wiecej danych\n";
else
for(i=1;i<=liczbapkt;i++)
{
cout<<"Podaj wspolrzedna X punktu "<<i<<": ";
cin>>tabx[i]; //do tablicy X wpisuje wszystkie wspolrzedne X
cout<<"\n";
cout<<"podaj wspolrzedna Y punktu "<<i<<": ";
cin>>taby[i]; //do tablicy Y wpisuje wszystkie wspolrzedne Y
cout<<"\n\n";
}
cout<<"\n";
Px1=tabx[liczbapkt];
Py1=taby[liczbapkt];
for(x=1;x<=liczbapkt-2;x++)
{
Px2=tabx[x];
Px3=tabx[x+1];
Py2=taby[x];
Py3=taby[x+1];
p=((Px2-Px1)*(Py2-Py1))-((Px3-Px1)*(Py3-Py1)); //pole trojkatow
p=p/2;
p=sqrt(p*p); //wartosc bezwzgledna
pole=p+pole; //suma pol
}
cout<<"Pole figury wynosi: "<<pole<<"\n\n";
cout<<"Koniec";
}
}
Ma on wyznaczac pole z podanych do programu wspolrzednych jego wierzcholkow.
dla przykladowych danych wejsciowych :
4 0 0 0 2 2 2 2 0
Dziala dobrze, jednak gdy wierzcholkow bedzie wiecej np
|
|
|
5 91 84 -75 76 -88 67 -33 -49 54 17
|
to juz gdzies sie myli i wyznacza bledne pole
Warto dodac ze pole program wylicza dzielac wielokat na trojkaty po czym sumuje ich pola