输入平面上任意三个点的坐标(x1,y1),(x2,y2),(x3,y3),判断其能否构成等腰直角三角形,若能则输出三角形的面积,否则输出“Impossible”
判断等腰直角三角形需要满足三个条件
(1)两边之和大于第三边
(2)两条直角边相等
(3)两边的平方和等于第三边的平方
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int x1,y1,x2,y2,x3,y3;
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
double b1,b2,b3;
double l1,l2,l3;
//计算边
b1 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
b2 = (x3-x1)*(x3-x1)+(y3-y1)*(y3-y1);
b3 = (x3-x2)*(x3-x2)+(y3-y2)*(y3-y2);
l1 = sqrt(b1);
l2 = sqrt(b2);
l3 = sqrt(b3);
//判断等腰直角三角形
if( l1 == l2 && b1+b2 == b3 && l1+l2 > l3)
printf("%lf",0.5*l1*l2);
else if(l1 == l3 && b1+b3 == b2 && l1+l3>l2)
printf("%lf",0.5*l1*l3);
else if(l2==l3 && b2+b3==b1 && l2+l3 > l1)
printf("%lf",0.5*l2*l3);
else
printf("Impossible");
return 0;
}
计算三条边长,判断是否构成三角形,然后判断是否两条边相等,再判断另一条边的平方是否等于相等边的平方和
#include <stdio.h>
#include <math.h>
int main()
{
int x1,y1,x2,y2,x3,y3;
double d1,d2,d3,d;
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
d1 = sqrt((x1-x2)*(x1-x2)*1.0 + (y1-y2)*(y1-y2));
d2 = sqrt((x1-x3)*(x1-x3)*1.0 + (y1-y3)*(y1-y3));
d3 = sqrt((x3-x2)*(x3-x2)*1.0 + (y3-y2)*(y3-y2));
if(d1+d2>d3 && d1+d3>d2 && d2+d3>d1)
{
if(d1==d2 && d1*d1*2 == d3*d3)
printf("%.2f",0.5*d1*d1);
else if(d2==d3 && d2*d2*2 == d1*d1)
printf("%.2f",0.5*d2*d2);
else if(d1==d3 && d1*d1*2 == d2*d2)
printf("%.2f",0.5*d3*d3);
else
printf("Impossible");
}
else
printf("Impossible");
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: