自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Head First 设计模式之第十章——状态模式

例子假设我们要用程序实现一个糖果机,糖果机有如下几个动作:投入25分钱(Insert Quarter),弹出25分钱(Eject Quarter),转动手柄(Turn Crank),释放糖果(Dispense);糖果机出有如下的几个状态:无25分钱(No Quarter),有25分钱(Has Quarter),售出糖果(Sold),糖果售罄(Sold Out)。这些状态与动作的转换关系如下图所示。糖果机一开机就自动进行“NoQuarter”状态,当有客户投入25分钱时,糖果机会自动进行HasQuart

2020-08-26 21:52:49 228

原创 Head First 设计模式之第九章——迭代器模式与组合模式

迭代器模式概念对于一些容器类型,如C++中的list、vector等等,很多时候需要对这些容器中的元素进行历遍操作。此时使用迭代器模式就非常方便了。迭代器模式主要是用于将历遍过程封装起来,并提供一个通用的接口,不管是何种类型的容器,都可以用相同的接口来进行历遍操作,从而将用户与具体的容器类型解耦出来。其类图如下所示:迭代器模式的定义为:迭代器提供了一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。其中,Iterator为迭代器接口,其定义了一个迭代器对外能提供的接口,针对具体的容器

2020-08-23 23:28:26 241

原创 Head First 设计模式之第八章——模板方法模式

例子在一个饮料店中,其提供咖啡与茶两种商品,两个商品的制作过程分别如下:茶的制作过程:将水烧开;用开水冲泡茶叶;将饮料倒进杯子;添加柠檬;咖啡的制作过程:将水烧开;用开水冲泡咖啡;把饮料倒进杯子;添加糖与牛奶。其实茶与咖啡的制作过程是十分相似的,其中第1、3步骤是相同的,而2、4步骤虽不同但十分相似,所以我们可以再作进一步的抽象,将2、4步骤分别抽象为:用开水冲泡、添加调味料。那么咖啡与茶的制作过程就被抽象成相同的了,只是在具体的步骤中进行不同的操作而已。上述情况可

2020-08-20 23:41:48 208

原创 Head First 设计模式之第七章——适配器模式与外观模式

适配器模式适配器(Adapter),顾名思义,即是通过转换接口,以达到匹配的目的。适配器模式也起到类似的作用。先举个例子,如下图所示,一个欧式的插座如何给美式的插头供电呢?答案很简单,添加一个交流电适配器即可,这个适配器一端连接欧式插座,另一端连接美式插头,插座与插头之间不需要相互认识,而只管给适配器供电与从适配器中获取电能即可。在程序设计中,也常常存在这样的一个场景:假设已有一个软件系统,客户想让这个软件系统能与新的厂商类库搭配使用,但这个软件系统的接口只能与旧的厂商类库匹配而与新的厂商类库的接口不

2020-08-18 22:24:44 150

原创 Head First 设计模式之第六章——命令模式

概念在讲命令模式之前,我们先假设如下的一个场景:假设有一个万能遥控,它可以控制多种家电的开关,如电灯、电视、电饭煲等等。如果要实现这样的一个万能遥控,那最直接的方法就是创建一个RemoteControl的类,在这个类中,实现创建电灯、电视等的对象,然后调用它们的on与off的方法来控制这些电器的开关。但这样做有一个很不好的后果,就是,如果我想用这个万能遥控来控制空调(谁叫你是万能遥控),那我岂不是要修改RemoteControl类,并在其中创建空调对象,然后直接调用空调的on与off方法。这对应于现实生活

2020-08-17 22:52:38 216

原创 Head First 设计模式之第五章——单例模式

概念在面向对象中,一个类可以创建无数个对象,但有时候需要对类添加一种限制,即:这个类只能创建一个对象。这初次听起来感觉有点奇怪,但是仔细一想,还是有很多场景需要满足这样的需求的。如日志类、状态机类、参数配置类等等。如日志类,它只可以创建一个对象,每次使用时,就直接调用这个对象,将所有信息均输出到同一个日志中,而不是使用时,创建若干个日志对象,将相关的信息输出到不同的日志中。一个类只能创建一个对象,这种模式就叫做单例模式。其定义是:”确保一个类只有一个实例,并提供一个全局访问点“。其类图如下所示,其构造函

2020-08-15 22:30:37 111

原创 Head First 设计模式之第四章——工厂方法模式与抽象工厂模式

工厂方法模式工厂方法模式如下图所示,其定义为:定义一个用于创建对象的接口(如图中的factoryMethod()),让子类决定实例化哪一个类。如下图中所示,创造者(AbstractCreator)的不同子类负责创建不同的产品,这些产品都是AbstractProduct的子类。对于一个需要创建产品的用户(ConcreteClient)而言,只需要给这个用户传入AbstractCreator的子类对象,这个对象用AbstractCreator的引用或指针来代表,然后这个用户调用这个Creator的factor

2020-08-15 09:44:23 101

原创 Head First 设计模式之第三章——装饰者模式

Head First 设计模式之第三章——装饰者模式内容回顾在第三章中,作者主要讲述了这样一个应用场景:咖啡店要做一个咖啡的订单系统,根据饮料及其附加的调味料来计算出饮料的价格。对于这个系统,有一定OO基础的菜鸟程序员很容易想到,直接写一个饮料的基类(如Beverage),基类中定义一个函数cost(),针对具体的饮料,分别定义Beverage的子类,如HouseBlend, Decaf等等,然后分别实现对应的cost()函数,客户点哪种饮料,就直接创建该饮料类的对象,然后直接调用其cost()函数,

2020-08-09 17:37:13 177

原创 Head First 设计模式之第二章——观察者模式

观察者模式的概述如下图所示,观察者模式中,有两种角色,即主题与观察者(又可以叫订阅者)。主题可以发布信息,而观察者可以订阅主题的信息,当然也可以取消订阅。当主题每次更新信息时,所有观察者都可以接收到信息。观察者模式是一种广播机制,主题与订阅者是一种一对多机制。所有主题类与观察者类都是主题接口、观察者接口的具体实现。观察者模式的应用上图中是一种观察者模式的应用,目的是实现一种天气信息的订阅系统。其大概过程如下:气象站负责发布天气信息,而手机、电视、收音机这些设备订阅了气象站的天气信息,一旦气象站发布

2020-08-05 22:02:37 149

原创 Head First 设计模式之第一章——策略模式

内容回顾第一章中,主要讲述了鸭子模拟器的实现,具体需求如下:要实现一个鸭子模拟器来模拟各种鸭子的行为,如叫、游泳等等的行为。针对这个需求,平常稍为有点OO思想的人,首先想到的方案就是:先设计一个鸭子的基类,在基类中设计若干个函数来表示鸭子的行为,如叫、游泳等等,然后用这个基类派生出若干个子类,每个子类代表一种鸭子,如唐老鸭、周黑鸭、北京烤鸭、橡皮小黄鸭等等,在这些基类中分别重载这些行为函数即可,那样在使用时,直接创建各个子类的实例,然后直接调用各自的行为函数,那样各个实例都会表示出各自应有的行为。

2020-08-05 21:59:53 245

原创 Dell Precision 7530装了Ububtu18.04后不连电源则不能开机的问题

问题描述最近新上手了一台Dell Precision笔记本电脑,用其自带的win10系统是没有什么问题,但由于我主要是在Ubuntu系统下进行开发的,所以就装了Win10 + Ubuntu 18.04的双系统,但我在使用的教程中发现了一个严重的问题,即如果笔记本不连电源适配器的情况下,它是不能正常开机的,老是卡在一个开机界面中,如果连接电源适配器,则一切正常。解决方法最终在Dell的官网论坛...

2020-03-15 09:56:39 491

原创 Docker教程之三:在Docker中进行开发

如果想在Docker中进行开发,那就要首先推荐使用vscode,这是一款开发神器,不过要首先在vscode中安装插件:Remote-Development。在Docker容器中开发程序与远程开发十分相似,或者说,这压根就是一种远程开发。运行Docker容器这里采用共享文件夹的方式来进行Docker容器中的程序开发,所以采用如下命令来运行Docker容器:docker run --rm -...

2020-02-23 14:45:47 3699

原创 Docker教程之二:Docker常用命令

Docker的具体使用教程可以参照如下的教程:阮一峰-Docker入门教程:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html菜鸟教程-Docker教程: https://www.runoob.com/docker/docker-tutorial.html这里主要讲一些常用的命令。# 从docker-hub中pull一...

2020-02-23 14:41:55 299

原创 Docker教程之一:Docker简介与安装

Docker的简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(From 百度百科)Docker与常见的虚拟机相比,它的镜像的体积可以做到很小,而且Docker容器里面的应用可以直接视为宿主机(Host)里面的一个进程...

2020-02-23 14:40:21 356

原创 Ubuntu 18.04中安装gdb-imagewatch的方法

在用OpenCV进行开发时,ImageWatch可以说是一个必不可少的调试工具,如果是在Windows中用Visual Studio来进行开发,那安个插件直接在Visual Studio中的插件库的搜索然后直接安装即可,但在Ubuntu中则没有那么容易安装,所以在此将安装方法记录下来,方便以后自己快速安装及方便后人。安装步骤安装依赖先检查一下自己的Ubuntu中是否安装了python3,如果...

2020-02-22 22:59:14 2650 1

原创 VIO学习(2)——IMU传感器

VIO学习(2)——IMU传感器IMU即是惯性测量单元,可以将其看作是加速度计(acc)与陀螺仪(gyro)的组合,它会直接输出该传感器当前的加速度(a\mathbf{a}a)与角速度(ω\mathbf{\omega}ω),根据这些信息,可以用于估计该传感器的位移、速度等等信息。IMU传感器的模型IMU的模型如下:ω~b=ωb+bgb+ngba~b=qbw(aw+gw)+bab+nab\...

2020-02-01 13:08:25 1439

原创 视觉SLAM中李群李代数与四元数总结

文章目录旋转的表示方式旋转向量旋转矩阵四元数三种方式之间转换旋转向量 ↔\leftrightarrow↔ 旋转矩阵旋转向量 ↔\leftrightarrow↔ 四元数旋转矩阵 ↔\leftrightarrow↔ 四元数李群李代数的性质指数与对数映射BCH公式李代数求导四元数的性质四无数加法四无数乘法参考文献在SLAM中经常会用到李群李代数与四元数来表示旋转变换,这些数学公式往往需要推导来推导去,...

2020-01-31 23:09:51 1173

原创 协方差矩阵的定义及意义

协方差矩阵的定义设一个随机向量为x∈RN\mathbf{x} \in \mathbb{R}^\mathrm{N}x∈RN,其均值为xˉ\bar{\mathbf{x}}xˉ,则令y=x−xˉ\mathbf{y} = \mathbf{x} - \bar{\mathbf{x}}y=x−xˉ,则随机向量x\mathbf{x}x的协方差定义为:Σx=[σ(x1,x1)⋯σ(x1,xN)⋮⋱⋮σ(xN,x...

2020-01-31 23:06:33 842

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除