计算几何初步(三角形面积&三点顺序)

设三角形三点为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;//三角形顺时针给出
}

你可能感兴趣的:(几何计算)