HOME> 本届世界杯> 向量复习(一):定义、求解、四则运算、点积和叉积

向量复习(一):定义、求解、四则运算、点积和叉积

向量复习(一) 1. 向量的定义2. 向量的表示3. 向量的求解4. 向量的四则运算4.1 加法4.2 减法4.3 乘法和除法 5. 点积和叉积5.1 点积5.2 叉积 6. 模的...

向量复习(一)

1. 向量的定义2. 向量的表示3. 向量的求解4. 向量的四则运算4.1 加法4.2 减法4.3 乘法和除法

5. 点积和叉积5.1 点积5.2 叉积

6. 模的求解7. 附录:代码8. 免责声明

首先,我们先来复习一下二维空间几何求交涉及的向量相关知识,方便那些数学基础不太好或好多年未接触数学的童鞋们。楼主就是其中一员哦,6-7年没有再碰高中数学了,所以对于向量比较熟悉的童鞋可以跳过这部分内容。

1. 向量的定义

在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量(或标量)只有大小,没有方向。1

定义大家应该都能明白,但是需要注意一点:给定的向量并不是固定不动的,它不像线段,起始和中止点都是固定的,向量是可以随意平移的,但线段不行,这点后面我们也会说。

2. 向量的表示

向量有两种表示方式:1. 几何表示法;2. 坐标表示法;几何表示法如下图1:

而坐标表示法比较重要,后面所涉及的都是这种方法,如下图1: 简单来说,向量(a, b)(以下简称v(a, b)),表示往x轴正方向移动a个单位,往y轴正方向移动b个单位。比如说v(4, 2),如下图所示:

每个虚线小箭头表示一个单位,我们可以看到从(2, 2)为起点,向x正方向移动4个单位,然后向y轴正方向移动2个单位,最后连接首尾两点的有向线段即为v(4, 2)。注意,我们之前提到向量可以随意平移,所以下面两组向量都表示同一个向量,即使它们的起点和终点并不相同:

也就是说,向量和起始终止位置无关,之和移动的方向和大小有关系。也可以说向量是动态的,而线段是静态的,这点大家需要注意啦哒~

3. 向量的求解

如果我们已知两个坐标点,如何求解这两点所表示的向量呢?方法也很简单:

v(a, b) = point1 - point2 = v(point1.x - point2.x, point1.y - point2.y)

其实就是两个坐标点x和y相减,那向量方向为:point2为起始点,point1为中止点,比如下面两点 (2,2) 和 (4,4),可以表示两个相反方向但模相同的向量(模即为向量的长度):

v(2, 2):

v(-2. -2):

所以大家在用坐标求解向量的时候一定要注意方向哦。

4. 向量的四则运算

4.1 加法

两个向量相加,一般使用三角形法则或四边形法则。比如v(4, 0) + v(0, 2) = v(4, 2):

从上图可以看出,最终求解的向量(标红)即为另外两个向量所组成的三角形的边。或者我们将v(4, 0) 和 v(0, 2)平移到对面的方向,组成一个平行四边形,那么最终求解的向量为这个平行四边形的内对角线:

而且我们也可以注意到,向量相加即为两个向量坐标之和:

/**

* vector addition

* */

public Vector add( Vector vector ) {

// 无视minsID

return new Vector( x + vector.x, y + vector.y, minsID-- );

}

4.2 减法

其实向量的减法可以看成加上一个方向相反的向量,所以同样适用三角形或平行四边形法则。还是上面的例子,这次我们减去v(0, 2),即加上v(0, -2):

另外注意,向量的运算需要两两向量首尾相连才能运算,所以下面右边这种是不允许的:

/**

* vector subtract

* */

public Vector subtract( Vector vector ) {

return new Vector( x - vector.x, y - vector.y, minsID-- );

}

4.3 乘法和除法

这里的乘法和除法并不是两个向量的乘法和除法,而是和一个常量相乘和相除。向量之间的乘法是后面会讲的点积和叉积,但向量之间没有除法。向量和常量相乘或相除,大家可以理解为两个向量之间的比例关系,我们用最简单的共线向量(即平行向量)来举例:

如果只看两者的模,我们知道 |v(8,0)| = 4|v(2,0)|,或者 |v(8,0)| / 4 = |v(2,0)|;上面表达了两个向量之间模的比例,但我们也可以直接用向量来表示两者之间的关系:v(8,0) = 4v(2,0),或者 v(8,0) / 4 = v(2,0);也就是说四分之一个v(8,0)即为v(2,0),4个v(2,0)即为一个v(8,0):

理解了这些概念,那么相应的代码也是很简单了:

/**

* vector multiplication

* */

public Vector multiply( float ratio ) {

return new Vector( ratio * x , ratio * y, minsID-- );

}

/**

* vector division

* */

public Vector division( float ratio ) {

return new Vector( x / ratio , y / ratio, minsID-- );

}

同时,楼主给到的图例也说明了向量四则运算的几何关系,大家可以注意下呢。

5. 点积和叉积

这部分主要介绍点积和叉积的计算方法和几何意义,至于其他详细的内容,有兴趣的童鞋可以参考这篇文章:向量内积(点乘)和外积(叉乘)概念及几何意义。

5.1 点积

先介绍一下点积的基本求解形式2,如果给定两个向量a和b:

则它们的点积定义为: 其实就是两个向量的每个变量两两相乘,再相加:

/**

* dot multiplication, vector * vector

* */

public static float dot( Vector vector1, Vector vector2 ) {

return vector1.x * vector2.x + vector1.y * vector2.y;

}

点积的几何意义也很简单:向量b在a上面的投影。注意,这里也说明了点积的结果为常量,而非向量:

图上红色部分即为v(3,4)在v(8,0)上面的投影,至于点积的其他内容,请参看上面提到的文章。

5.2 叉积

叉积的一般计算求解需要用到矩阵乘法,而后面涉及的几何求交主要是二维坐标,所以这里直接介绍二维坐标的乘法:即x和y交叉相乘,再相减。

/**

* cross multiplication, vector x vector

* */

public static float cross( Vector vector1, Vector vector2 ) {

return vector1.x * vector2.y - vector1.y * vector2.x;

}

叉积的几何意义相对复杂一些:1)其模等于两个向量所组成的平行四边形的面积;2)方向为垂直于两个向量所在平面。所以叉积和点积不一样,叉积的结果是向量,而不是常量。大家可以看下面图示2来理解:

6. 模的求解

模的求解最简单的方法就是两点之间的距离公式,这点我们从上面的向量几何意义就能看出来,但是这样计算太复杂了。还记得我们说过向量可以自由平移么?那么为何不把向量平移到原点,然后再计算其模呢?通过这样的处理,一个向量的模可以使用其坐标直接求解,而不用两点间的距离公式:

/**

* vector's norm, but without radical

* */

public float normWithoutRadical() {

return x * x + y * y;

}

/**

* vector's norm

* */

public float norm() {

return ( float ) Math.sqrt( normWithoutRadical() );

}

norm()是开方之后的结果,normWithoutRadical()则没有开方,后面两个都有用到,因为有些时候我们不需要开方,可以减少浮点数计算误差。

通过这样,我们可以求得向量的模。我们最后再提一下一个概念:单位向量(e),即模为1的向量。那么,给定一个向量如何求得e呢?其实很简单:

e(a, c) = v(a, b) / |v(a, b)|

也就是向量除以它的模,即为每个单位的向量。

好啦,向量先复习到这里,以后有遇到更多知识再来讲解哒~接下来,我们将开始正式讲解两种几何求交的问题:直线和直线,圆和直线。

几何求交(一):直线和直线的交点

几何求交(二):直线和圆的交点

7. 附录:代码

代码:Vector.java项目代码:Algorithm Repository

8. 免责声明

※ 本文之中如有错误和不准确的地方,欢迎大家指正哒~ ※ 此项目仅用于学习交流,请不要用于任何形式的商用用途,谢谢呢;

向量 ↩︎ ↩︎ ↩︎

向量内积(点乘)和外积(叉乘)概念及几何意义 ↩︎ ↩︎


手机bilibili如何开启截图功能 b站截取图像的教程【详解】 这个术前操作,差点引爆了患者的肠道