设三角形三点为A(x1,y1),B(x2,y2),C(x3,y3),三边长为a,b,c,高为h,面积为s,p=(a+b+c)/2
计算三角形面积
公式:
①s=(a * h)/2=(b * h)/2=(c * h)/2;
double area(double h,double x){
return 0.5*x*h;
}
②s=(p * (p-a) * (p-b) * (p-c))^0.5;
double area(double x1,double y1,double x2,double y2,double x3,double y3){
double a,b,c,p,s;
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=aqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
三点顺序
给三个点A,B,C的坐标,判断能否组成一个三角形;若能,判断A,B,C是顺时针给出的还是逆时针给出的?
利用矢量叉积判断是逆时针还是顺时针。
三角形两边的矢量分别是:AB=(x2-x1,y2-y1), AC=(x3-x1,y3-y1)
则AB * AC=(x2-x1) * (y3-y1) - (y2-y1) * (x3-x1)
利用右手法则进行判断:
如果AB * AC>0,则三角形ABC是逆时针的;
如果AB * AC<0,则三角形ABC是顺时针的;
如果AB * AC=0,则说明三点共线(不能构成三角形)。
int orderPoints(double x1,double y1,double x2,double y2,double x3,double y3){
double abx,aby,acx,acy,k;
abx=x2-x1;
aby=y2-y1;
acx=x3-x1;
acy=y3-y1;
k=abx*acy-aby*acx;
if(k>0)
return 1;//三角形逆时针给出
else if(k==0)
return 0;//不能构成三角形
return -1;//三角形顺时针给出
}