已知两点获取单位向量 和 单位垂直向量

已知两点获取单位向量 和 单位垂直向量

/************************************************************************
*函数名:        getUnitVector
*
*函数作用:      根据两点获取单位向量
*
*函数参数:
*CvPoint pointO  - 起点
*CvPoint pointA  - 终点
*
*函数返回值:
*CvPoint2D32f    两点之间的单位向量
**************************************************************************/
CvPoint2D32f getUnitVector (CvPoint pointO,CvPoint pointA )
{
	CvPoint2D32f point;
	float distance;
	distance = powf((pointO.x - pointA.x),2) + powf((pointO.y - pointA.y),2);
	distance = sqrtf(distance);

	point.x = float(pointA.x - pointO.x)/distance;
	point.y = float(pointA.y - pointO.y)/distance;

	return point;
}

/************************************************************************
*函数名:        getUnitVerticalVector
*
*函数作用:      根据两点获取垂直单位向量
*
*函数参数:
*CvPoint pointO  - 起点
*CvPoint pointA  - 终点
*int type        - 0 表示方向是向左上
*
*函数返回值:
*CvPoint2D32f    两点之间的垂直单位向量
**************************************************************************/
CvPoint2D32f   getUnitVerticalVector (CvPoint pointO,CvPoint pointA,int type )
{
	CvPoint point;
	CvPoint2D32f p;

	point.x = pointA.x - pointO.x;
	point.y = pointA.y - pointO.y;

	if ((0 == point.x) && ( 0 == point.y))
	{
		p.x = 0;
		p.y = 0;
		printf("  getUnitVerticalVector : error, ( 0 == point.x) && if ( 0 == point.y)");

		return p;
	}

	if ( 0 == point.x)
	{
		if (0 == type)//垂直向量的y分量小于于0,向左上
		{
			p.x = -1;
		}
		else
		{
			p.x = -1;
		}
		p.y = 0;

		return p;
	}

	if ( 0 == point.y)//垂直向量的y分量小于于0,向左上
	{
		p.x = 0;
		p.y = -1;//图片中越往下越大,所以 y坐标= -1 表示向上

		return p;
	}

	//求垂直单位向量p
	/*
	float pow(float x, float y); 
	原型:在TC2.0中原型为extern float pow(float x, float y); ,
	而在VC6.0中原型为double pow( double x, double y );
	头文件:math.h/cmath(C++中)
	功能:计算x的y次幂。
	返回值:x应大于零,返回幂指数的结果。
	返回类型:double型,int,float会给与警告!  
	*/
	p.y = - fabsf((point.x * 1.0f)/sqrtf((powf(point.x, 2)) + powf(point.y, 2)));
	p.x = - ((point.y * 1.0f)/point.x)*p.y;

	if (0 == type)//垂直向量的y分量小于0,向左上
	{
		if (0 < p.y)
		{
			p.x = - p.x;
			p.y = - p.y;
		}
	}
	else
	{
		if (0 > p.y)//垂直向量的y分量大于0,向下
		{
			p.x = - p.x;
			p.y = - p.y;
		}
	}

	return p;
}


你可能感兴趣的:(数学计算)