矢量相关

内容

1、矢量的表示

2、矢量的基本运算

3、矢量的点积

4、矢量的模长

5、矢量的单位化

6、矢量的投影长度

7、矢量的叉积

8、两个矢量所围成的三角形的面积

9、求多边形的面积

1、矢量的表示

class CVector{
	double x,y;
};

//表示从0点到(x,y)的矢量,对矢量只关心方向和长度,不关心起点和终点 

2、矢量的基本运算

+

CVector operator +(CVector p,CVector q)
{
	return CVector(p.x+q.x,p.y+q.y);
}

-

CVector operator -(CVector p,CVector q)
{
	return CVector(p.x-q.x,p.y-q.y);
}

*

CVector operator *(double k,CVector p)
{
	return CVector(k*p.x,k*p.y);
}

3、矢量的点积

double operator *(CVector p,CVector q)
{
	return p.x*q.x+p.y*q.y;
}

4、矢量的模长

double length(CVector p)
{
	return sqrt(p*p);
}

5、矢量的单位化

CVector unit(CVector p)
{
	return 1/length(p)*p;
}

6、矢量的投影长度

//求向量p在向量n上的投影长度 
double project(CVector p,CVector n)
{
	return dot(p,unit(n));//点积 
}

double dot(CVector p,CVector q)
{
	return p.x*q.x+p.y*q.y;
}

7、矢量的叉积

功能:求面积;判断是否在半平面上;求顺时针方向还是逆时针方向

double operator ^(CVector p,CVector q)
{
	return p.x*q.y-q.x*p.y;
}

8、两个矢量所围成的三角形的面积

double area(CVector p,CVector q)
{
	return p^q/2;
}

9、求多边形的面积

按逆时针方向顺次为各边指定方向
对于每条边AB,累加A^B/2的值
最后得到的结果即为多边形的面积
当然也可以累加A^B的值,最后再除以2 

猜你喜欢

转载自blog.csdn.net/SongBai1997/article/details/84935615