向量的基本运算

    向量在计算几何中是最常用的结构,也是包含运算较多的结构,这里主要介绍加法,减法,乘法,与数作积,点积,叉积等。这些运算的意义,此处不再赘述。
    1.向量运算的实现
    向量的基本运算可以通过单独写函数来实现,也可以通过重载运算符来实现,通过重载运算符实现的例程如下:

    struct point{

        double x,y;

        //定义构造函数会对后面的工作提供极大的便利

        point(){}

        point ( double _x , double _y ) x : ( _x ) , y ( _y ){}  //采用运算符重载的方式实现向量的运算

        point operator + ( point a )   //向量加法

        {

            return point( x+a.x , y+a.y );

        }

        point operator - ( point a )    //向量减法

        {

            return point( x-a.x , y-a.y );

        }

        double operator * ( point a )    //向量叉积

        {

            return x * a.y - a.x * y ;

        }

        double operator ^ ( point a )   //向量点积

        {

            return x * a.x + y * a.y;

        }

        point operator * ( point a )  //向量乘以实数

        {

            return point ( a * x , a * y );

        }

        double len2()                       //向量模的平方

        {

            return x * x + y * y;

        }

    };

    2.向量点积,向量叉积

    向量的点积、叉积是既常用又十分灵活的运算。

    1)向量点积

    两个向量u、v的点积定义为u · v=||u|| · ||v|| · cosθ,其中θ为u和v的夹角。

    如果用坐标表示u,v,即u=( x1 ,  y1 ),v=( x2 , y2 ),即u · v=x1x2 + y1y2 。

    结合以上两点,点积常用来求向量的夹角,如下式:

    θ=arccos ( u · v ) / ( ||u|| ·||v|| )

    点积还可以用来计算向量在另一向量的投影,如下式:

    ( u · v ) / ||v|| = ||u|| cosθ

    上式表示u在v方向上的投影,它也是个向量,值为正表示其与v同向,否则与v反向。

    2)向量叉积

    两个向量u、v的叉积又称叉乘,定义为u × v = ||u|| · ||v|| · sinθ,其中θ为u和v的夹角。叉乘的结果还是一个向量,其方向跟u、v垂直且遵循右手定则。

    如果用坐标表示u,v,即u=( x1 ,  y1 ),v=( x2 , y2 ),即u · v=x1y2 - x2y1 。

    向量u、v的叉乘的几何意义是以u、v为邻边的平行四边形面积。

    当令 I =  × ,当I为正时,点C在向量所在直线的左侧(沿向量方向);当其为负时,C在向量所在直线的右侧;当I为0时,C在AB上。这是一条常用的性质,也是用来判断点与直线的位置关系的方法。

    习题推荐:HDU 1086

                    POJ 2826

猜你喜欢

转载自blog.csdn.net/g21glf/article/details/80904435
今日推荐