廢話不多說,看代碼:
#include <iostream>
#include <math.h>
using namespace std;
class Area
{
public:
void In();
void Calucate();
void Out();
private:
int N;
float sum;
float x1,x2,x3,y1,y2,y3;
};
void Area::In()
{
sum = 0;
cout << "輸入多邊形頂點數:" ;
cin >> N;
cout << "輸入坐標按多邊形頂點的順時針或逆時針輸入!" << endl;
if(N==3)
{
cout << "請輸入第1個頂點坐標:";
cin >> x1 >> y1;
cout << "請輸入第2個頂點坐標:";
cin >> x2 >> y2;
cout << "請輸入第3個頂點坐標:";
cin >> x3 >> y3;
Calucate();
}else
{
cout << "請輸入第1個頂點坐標:";
cin >> x1 >> y1;
cout << "請輸入第2個頂點坐標:";
cin >> x2 >> y2;
cout << "請輸入第3個頂點坐標:";
cin >> x3 >> y3;
Calucate();
for(int i=3;i<N;i++)
{
cout << "請輸入第" << i+1 << "個頂點坐標:";
if((i+1)%2==0)
{
cin >> x2 >> y2;
Calucate();
}else
{
cin >> x3 >> y3;
Calucate();
}
}
}
}
void Area::Calucate()
{
float Cir,L1,L2,L3;
L1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
L2 = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
L3 = sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
Cir = (L1+L2+L3)/2;
sum += sqrt(Cir*(Cir-L1)*(Cir-L2)*(Cir-L3));
}
void Area::Out()
{
cout << "該多邊形面積為:" << sum << endl;
}
int main()
{
Area polygon;
polygon.In();
polygon.Out();
return 0;
}
不過該方法有個缺陷就是輸入多邊形頂點坐標時必須按順時針或者逆時針輸入,不然的話就會計算錯誤。

uj5u.com熱心網友回復:
請問怎么解決隨機輸入坐標而不用按順時針或者逆時針。uj5u.com熱心網友回復:
我覺得,在計算前,按照x或者y,排一下點的順序就行吧。
uj5u.com熱心網友回復:
你還是先研究研究這個公式的理論吧順序代表的是什么
那代表一個個的邊, 換了順序,
那多邊形的形狀還是原來的嗎?!
面積還可能和原來一樣嗎?!
uj5u.com熱心網友回復:
四個點, 組成一個矩形, 1 2 3 4 假如是逆時針的, 你改成1 3 2 4, 結果是什么, 一個漏斗形狀了, 那面積能一樣?!uj5u.com熱心網友回復:
隨機順序輸入還要面積正確?這個多邊形是凸的嗎?要不你查一下凸包演算法?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39515.html
標籤:模式及實現
下一篇:萌新求助
