求三点夹角(angle).txt

来自「vc++中的点和直线之间的各种几何算法...对c++初学者或者ACM编程者有很大」· 文本 代码 · 共 24 行

TXT
24
字号
/* 返回顶角在o点,起始边为os,终止边为oe的夹角(单位:弧度) 
角度小于pi,返回正值 
角度大于pi,返回负值 
可以用于求线段之间的夹角 
*/ 
double angle(POINT o,POINT s,POINT e) 
{ 
	double cosfi,fi,norm; 
	double dsx = s.x - o.x; 
	double dsy = s.y - o.y; 
	double dex = e.x - o.x; 
	double dey = e.y - o.y; 
	
	cosfi=dsx*dex+dsy*dey; 
	norm=(dsx*dsx+dey*dey)*(dex*dex+dey*dey); 
	cosfi /= sqrt( norm ); 
	
	if (cosfi >=  1.0 ) return 0; 
	if (cosfi <= -1.0 ) return -3.1415926; 
	
	fi=acos(cosfi); 
	if (dsx*dey-dsy*dex>0) return fi;      // 说明矢量os 在矢量 oe的顺时针方向 
	return -fi; 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?