2018蓝桥杯C++A组:三角形面积(海伦公式;向量的叉积)

一、题目:三角形面积
已知三角形三个顶点在直角坐标系下的坐标分别为:
(2.3,2.5)
(6.4,3.1)
(5.1,7.2)
求该三角形的面积。
提交小数形式表示浮点数,精确到小数点后三位。


  • 分析思路:

三角形面积求法:
1.海伦公式
2018蓝桥杯C++A组:三角形面积(海伦公式;向量的叉积)_第1张图片

2.向量的叉积
2018蓝桥杯C++A组:三角形面积(海伦公式;向量的叉积)_第2张图片

  • 代码1:海伦公式
#include
#include
#include
using namespace std;

typedef pair<double,double> PDD;

int main(){
	PDD points[3];
	for(int i=0;i<3;i++){
		scanf("%lf%lf",&points[i].first,&points[i].second);
	//	cout<
	}
	double l[3];
	for(int i=0,k=0;i<3;i++)
		for(int j=i;j<3;j++){
		double x1=points[i].first,y1=points[i].second;
		double x2=points[j].first,y2=points[j].second;
		double dx=x1-x2,dy=y1-y2;
		l[k]=sqrt(dx*dx+dy*dy);
		cout<<dx<<' '<<dy<<endl;
	}
	double a=l[0],b=l[1],c=l[2];
	double p=(a+b+c)/2;
	cout<<sqrt(p*(p-a)*(p-b)*(p-c))<<endl;
	return 0;

}
  • 代码2:向量的叉积
#include
#include
#include
using namespace std;

typedef pair<double,double> PDD;
#define x first
#define y second

double cross(double x1,double y1,double x2,double y2)
{
	return x1*y2-x2*y1;
}
int main() {
	PDD pts[3];
	for(int i=0;i<3;i++){
		scanf("%lf%lf",&pts[i].first,&pts[i].second);
	}
	cout<<0.5*cross(pts[1].x-pts[0].x,pts[1].y-pts[0].y,pts[2].x-pts[0].x,pts[2].y-pts[0].y)<<endl;
    return 0;
}

结果:8.795

你可能感兴趣的:(蓝桥杯习题,c++)