内容
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