1. 程式人生 > >【TOJ 5255】C++實驗:三角形面積(海倫公式)

【TOJ 5255】C++實驗:三角形面積(海倫公式)

esc man opera time public 三角形面積 AC pac 公式

描述

實現C++三角形類,其中包含3個點(CPoint類型),並完成求面積。
主函數裏的代碼已經給出,請補充完整,提交時請勿包含已經給出的代碼。

int main()
{
	CPoint p1, p2, p3;
	while(cin>>p1>>p2>>p3)
	{
		CTriangle t(p1, p2, p3);
		cout<<setiosflags(ios::fixed)<<setprecision(3)<<t.Area()<<endl;//調用求面積函數輸出
	}
	return 0;
}

輸入

輸入數據有多組,每組包含x1, y1, x2, y2, x3, y3六個整數,表示三個點(x1, y1)、(x2, y2)、(x3, y3),三點不共線。

輸出

每組輸出一個值,即三角形面積,保留3位小數。

樣例輸入

0 0 0 1 1 0

樣例輸出

0.500

題解

海倫公式:技術分享圖片 公式中a,b,c分別為三角形三邊長,p為半周長,S為三角形的面積。
#include<iomanip>
#include<iostream>
#include<cmath>
using namespace std;
class CPoint{
public:
    int x,y;
    CPoint(int x=0,int y=0):x(x),y(y){}
    friend istream &operator>>(istream &is
,CPoint&p) { is>>p.x>>p.y; return is; } }; class CTriangle{ public: CPoint p1,p2,p3; CTriangle(CPoint p1,CPoint p2,CPoint p3):p1(p1),p2(p2),p3(p3){} double Area() { double a=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
double b=sqrt((p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p1.y-p3.y)); double c=sqrt((p3.x-p2.x)*(p3.x-p2.x)+(p3.y-p2.y)*(p3.y-p2.y)); double p=(a+b+c)*0.5; double s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; } }; int main() { CPoint p1, p2, p3; while(cin>>p1>>p2>>p3) { CTriangle t(p1, p2, p3); cout<<setiosflags(ios::fixed)<<setprecision(3)<<t.Area()<<endl;//調用求面積函數輸出 } return 0; }

【TOJ 5255】C++實驗:三角形面積(海倫公式)