Problem C: 计算三角形面积
Time Limit: 1 Sec Memory Limit: 128 MB
Description
平面上有一个三角形,它的三个顶点坐标分别为(x1, y1), (x2, y2), (x3, y3),那么请问这个三角形的面积是多少。
Input
输入仅一行,包括6个单精度浮点数,分别对应x1, y1, x2, y2, x3, y3。
Output
输出也是一行,输出三角形的面积,精确到小数点后两位。
Sample Input
0 0 4 0 0 3
Sample Output
6.00
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,x2,x3,y1,y2,y3,q,sum,summ,summm,s;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
sum=fabs(x1*x1-y1*y1);
sum=sqrt(sum);
summ=fabs(x2*x2-y2*y2);
summ=sqrt(summ);
summm=fabs(x3*x3-y3*y3);
summm=sqrt(summm);
q=sum+summ+summm;
q=q*0.5;
s=q*(q-sum);
s=s*(q-summ);
s=s*(q-summm);
s=fabs(s);
s=sqrt(s);
cout<<fixed<<setprecision(2)<<s;
return 0;
}
请问我这里哪错了?
这题应该用勾股定理和海伦公式:
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
double x1,x2,x3,y1,y2,y3,l1,l2,l3,ans=0.0,p;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
l1=sqrt(pow(fabs(x2-x1),2)+pow(fabs(y2-y1),2));
l2=sqrt(pow(fabs(x2-x3),2)+pow(fabs(y2-y3),2));
l3=sqrt(pow(fabs(x3-x1),2)+pow(fabs(y3-y1),2));
p=(l1+l2+l3)/2.0;
ans=sqrt(p*(p-l1)*(p-l2)*(p-l3));
printf("%.2lf\n",ans);
}
没问题好吧
不知道你这个问题是否已经解决, 如果还没有解决的话:问题所在在于计算三角形面积的公式上有误。
下面是对代码的修改建议:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,x2,x3,y1,y2,y3,s;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
// 使用海伦公式计算三角形面积
float a = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
float b = sqrt((x1-x3)*(x1-x3) + (y1-y3)*(y1-y3));
float c = sqrt((x2-x3)*(x2-x3) + (y2-y3)*(y2-y3));
float p = (a + b + c) / 2; // 半周长
s = sqrt(p * (p-a) * (p-b) * (p-c)); // 海伦公式
cout<<fixed<<setprecision(2)<<s;
return 0;
}
注意,你之前的代码有一些无用的变量和计算,也没有使用正确的计算公式。上面的修改建议使用了正确的海伦公式来计算三角形的面积。