向量复习(一)

  • 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 ) {// 无视minsIDreturn 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. 附录:代码

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

8. 免责声明

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



  1. 向量 ↩︎ ↩︎ ↩︎

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

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

  1. 【线性代数的本质|笔记】从线性变换的角度看向量的点积和叉积

    点积与叉积 引入点积的标准方法 定义:对于给定的两个同维度的向量求解点积,就是将向量相对应的维度的分量相乘再相加. 几何意义:两个向量w和v的点积,可以看成是向量w在v方向的投影和v长度的乘积:或者是 ...

  2. Matlab答疑五:使用微分定义求解微分方程的数值解

    1.题目 解微分方程 dydt=sin(y)+t,其中t=0时y=0,并绘图. 说明,一般对dydt的求解方法为:y(t+dt)=y(t)+dydt(t)*dt 2.方法 除了题目给出方法:使用定义求 ...

  3. matlab 向量_Matlab:向量点积和叉积及求模

    点击上方蓝字关注 无距书乡 获取持续更新 上一篇中我们说到了如何在matlab中创建向量以及向量的加减乘除方法.今天我们继续介绍向量的点积和叉积以及如何求向量的长度.下一篇再讲矩阵相关知识. 两个向量 ...

  4. matlab中计算容差是什么,相对和绝对容差定义求解

    我想了解以下Matlab的定义,RELTOL和AbsTol参数:相对和绝对容差定义求解 RelTol - This tolerance is a measure of the error relati ...

  5. 复数四则运算公式java_复数的定义和四则运算公式

    我们把形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位.接下来分享复数的定义和四则运算公式. 复数的定义 复数是形如a+bi的数.式中a,b为实数,i是一个满 ...

  6. 高中数学必修四平面向量复习笔记知识点

    本文作者:vxbomath 今天我给大家分享高中数学必修四平面向量复习笔记知识点, 以帮助同学梳理知识. 好了,高中数学必修四平面向量复习笔记知识点今天分享就到这里了,需要更多技巧视频可以私信老师每天 ...

  7. 向量:使用点积和叉积

    目录 向量:使用点积和叉积 问题 解决方案 点积 叉积 实际应用 向量:使用点积和叉积

  8. 点积和叉积在计算机图形学的应用

    点积和叉积在计算机图形学中,是最为基础且重要的概念,初学者弄清它的概念的应用,是很重要的.最后一节,是为了加强理解记录,如果不看也是可以的,大家选择观看,有兴趣可以去看原视频,结合我的笔记. 前置知识 ...

  9. 点积和叉积【计算集合】

    先简单看一道几何的题目吧. 常见的空间几何公式: 1.俩点之间的距离sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)) 2.平面三角公式:p = (a+b+ ...

最新文章

  1. Analyzer tool(MAT)分析JVM内存泄露案例
  2. Elasticsearch集群部署的相关问题记录
  3. 小工匠聊架构-超高并发秒杀系统设计 06_数据一致性
  4. Flask-hello程序
  5. java 指定打印机打印_java 指定打印机 进行打印
  6. 游戏服务器架构:网络服务器端程序线程划分
  7. [jquery]为jQuery.ajax添加onprogress事件
  8. Prometheus Alertmanager 报警模块
  9. 2013着重发展的4个方向
  10. 软件项目的面向对象设计、开发及管理
  11. java 并行框架_JAVA并行框架学习之ForkJoin
  12. c语言烟花代码,C语言烟花程序
  13. 免杀技术有一套(免杀方法大集结)
  14. 工业企业外购材料进项税额的会计处理
  15. 黄一老师:什么是个人信用融资?
  16. 几个常用的、重要的网络命令!(ping,Tracert ,winipcfg等)
  17. 数据结构 栈 括弧匹配检验
  18. matlab射影几何,一种利用单幅图像的现场摄像机自标定方法
  19. 【学习笔记】联邦计算
  20. Saas发展史常用架构

热门文章

  1. jquery金额数字转大写
  2. 海思芯片-Hi3512参数规格介绍
  3. 用晨曦记账本记账,设置背景、文字颜色
  4. app自动化(二)python代码操控手机终端
  5. Realme GT 大师版 ROOT 解锁BL教程
  6. 【C++】1014 福尔摩斯的约会
  7. 山西大学计算机研究生考纲,2020考研大纲
  8. 优雅的数据库表ID的设计方案
  9. 极客时间去除复制保护
  10. (FZU-2285-迷宫寻宝)BFS最短路径问题