因之前使用的云服务器的期限将近,不打算继续使用,所以购买了新的服务器实例,需要将博客网站迁移到新的实例上。本文作为网站迁移的记录。因为我对网站开发的专业知识较为欠缺,所以本文并非专业的实践。
主要内容包括wordpress以及mysql数据库的中的记录导出;在新的服务器上部署安装nginx,php,mysql等软件并且进行配置;将数据导入新的服务器几个部分。
Continue reading因之前使用的云服务器的期限将近,不打算继续使用,所以购买了新的服务器实例,需要将博客网站迁移到新的实例上。本文作为网站迁移的记录。因为我对网站开发的专业知识较为欠缺,所以本文并非专业的实践。
主要内容包括wordpress以及mysql数据库的中的记录导出;在新的服务器上部署安装nginx,php,mysql等软件并且进行配置;将数据导入新的服务器几个部分。
Continue reading本文对谷歌资深工程师Fergus Henderson发表的论文《Software Engineering at Google》进行了翻译。论文的主要内容是从软件开发、项目管理、人事管理等三个方面介绍谷歌的软件工程实践方法,文章不仅从“道”,“法”方面介绍谷歌多年沉淀出的软件工程理念,而且详细的说明“术”,“器”即谷歌构建的具体流程与工具。本文从多个层面具备参考价值。 Continue reading
给定2D平面上点\(c(x,y)\)确定其是否在多边形p内部,是比较常见的几何查询问题之一。本文的内容是阐述射线法(Ray Casting Algorithm)求解普通多边形(simple polygon) PIP(point in polygon)问题的思路与实现。目前网上类似文章不少,但是其中部分文章缺乏对特殊情况的讨论,在应用时容易在特例数据上失败。 Continue reading
众所周知,最小二乘法通过最小化误差平方和获得最佳函数。有时候你可能产生疑问,为什么不能通过其他方式获得最优函数,比如说最小化误差的绝对值的和?本文中,我将会从概率的角度解释最小二乘法的依据(参考自andrew ng 《机器学习课程》 第三讲)。最小二乘问题可以分为线性最小二乘和非线性最小二乘两类,本文的目标是介绍两种经典的最小二乘问题解法:高斯牛顿法与莱文贝格-马夸特方法。实际上,后者是对前者以及梯度下降法的综合。 Continue reading
梯度下降法与牛顿法是求解最小值/优化问题的两种经典算法。本文的目标是介绍两种算法的推导思路与流程,并且从初学者的角度就一些容易混淆的话题如 梯度下降法(gradient descent)与最速下降法(steepest descent)的联系与区别、牛顿求根迭代方法(Newton–Raphson method) 与牛顿法求解最小值算法的联系(来自 Andrew Ng 机器学习课程第四讲)进行说明。本文的内容将对高斯牛顿法(Gauss–Newton algorithm) ,Levenberg-Marquardt算法(LM算法)等非线性最小二乘问题解法起到引出作用。
拓扑(topology)是由DCEL构成的一种平面镶嵌数据结构。拓扑数据结构将平面划分为若干相互邻接且不压盖的拓扑面。在拓扑结构上实施的标记算法是叠置算法的核心(第四节)。这一节,我将介绍拓扑构建算法。 Continue reading
本文介绍两种多边形(简单多边形)的顺逆时针顺序判断算法,其中一种算法就是通过计算多边行的面积(带符号)来判断。另一种方法是根据最左侧点前后边的转向(叉积)判断。有意思的是,网上有一些文章并没有就这种方法的特殊情况进行讨论。 Continue reading
kd树可能是我们最熟悉的空间索引。kd树的全称是k-dimensional tree,顾名思义,是一种将多维数据组织起来的数据结构。不仅服务于计算几何领域,而且在统计分析、机器学习领域都是非常活跃的。本文将主要围绕kd树的结构、构建、半径搜索(范围搜索)、最近邻搜索(KNN)等主要的算法进行展开,同时也会涉及到近似最近邻与最近邻算法的区别,spliting 策略等有趣的细节。并且,我还会介绍部分FLANN库(被PCL使用)对上述算法的实现方式。在文章末尾,提供了c++实现代码。 Continue reading
本文的主要目标:1.介绍3D Hough Transform的应用场景,算法思路,算法步骤以及代码。2.对其应用场景进行更进一步分析,与相似用途的算法(RandSAC)进行比较,分析优缺点。 Continue reading
近期,在小组内做了一期关于编码规范的小培训,将编写的编码规范文件分享与下文。组内成员有不同的背景和风格,因此几个工程的编码风格迥异,不乏有一些不规范,有风险的地方。目前网上流行的编码规范一般大而全,考虑到不影响现有工作进行,循序渐进的改进方法,我尽量选择了重要的条目,并且进行了分级。结合组内实际情况,突出了一些常见问题。
叠置分析的核心任务是解决由多个图层生成的新数据中,每个新生成的对象是由哪些输入对象“叠置”生成出来的问题。即所谓的对象标记。栅格叠置分析的标记非常简单,矢量对象的对象标记算法相对来说就要复杂很多。接上文,当输入要素建立了对象模型与拓扑模型的关联,构建拓扑模型后,本文介绍一种拓扑面标记算法,以解决叠置分析结果的标记问题。 Continue reading
地图投影是GIS领域中非常常见的概念。说到高斯克吕格投影,很多同学都耳熟能详,因为它是我国大中基本比例尺地形图使用的地图投影。但是如果涉及到高斯投影的具体性质,有人会犯迷糊了。所以,我将高斯克吕格投影的相关内容整理如下。 Continue reading
主流的GIS应用与spatial database 均采用了对象模型,一个空间要素包含几何与属性两部分,并不保存对象之间的拓扑关系。基于种种考虑,拓扑模型已经不常用,拓扑关系的生成转变为由实时计算生成。拓扑关系计算的核心是9交叉模型,本文的主要目的是揭示对象模型(以多边形为例)到拓扑模型的关联过程。并且结合 geos与ArcGIS中相应的内容予以说明。 Continue reading
这一节我计划介绍叠置分析算法的基础-数据结构,即拓扑(topology)数据模型,在不同的领域/软件中,对拓扑数据模型的实现有不一样的叫法,比如geos中称之为planargraph(平面图)或者geomgraph,计算几何(Computational Geometry)的书籍以及CGAL中将其称为DCEL(Double Connected Edge List),ArcGIS早期的数据模型称之为Coverage。拓扑数据模型是一种用GeoRelational模型,即显式的表达了空间关系,叠置算法就是建立在这种数据模型之上的。 Continue reading
空间分析可以说是GIS系统的最重要的功能了。在若干种空间分析操作中,我们最常用的就是叠置分析(overlay analysis ,下文称overlay)。乃至于在《GIS Primer》中,overlay被称为任何GIS软件系统的基本必备功能。同时,任何软件也将空间分析定义为核心功能,其主要的难点在于数据量以及效率。这一节里,我们抛开具体的实现不谈,先请你了解一下overlay有哪些应用。 Continue reading
空间关系描述是GIS系统的基本功能之一。我在学校学习到的空间关系分为三种:方位关系、距离关系、拓扑关系。今天我要分享的拓扑关系的标准化描述:9交叉模型。科班出身的GISer可能都知道9交模型是Egenhofer在《point set topological spatial relations》中提出的,不过,我今天不打算综述空间关系有关的理论发展,而是结合geos,分享9交模型的原理以及常见的拓扑关系描述符。
本系列的主题是“NURBS”,但是大部分篇幅集中与Bezier(B Spline的特殊形式),B Spline。之所以这么安排,是因为NURBS与B样条可以轻松的互相转换,B样条的计算方法,均可以应用到NURBS(非均匀有理B样条)上。 Continue reading
曲线拟合包含两个方面,插值(interpolation)和逼近(approximation)。用于曲线拟合的离散点通常不具有非常高的精度,直接插值得到的曲线可能不满足“光顺(fair)”要求,本节的目标是介绍光顺的定义,以及给出一种满足“光顺”要求的最小二乘逼近方法。 Continue reading
插值是指:已知形状点(Fit Point),求一条样条曲线穿过所有的形状点。插值是B样条乃至CAGD应用中最常见的应用之一。本节,我将分享一种样条曲线插值算法。 Continue reading
在曲线拟合问题中,通常需要根据已知曲线上的离散点,估算出曲线在端点处的导数(严格来说是导矢),常用的一种导数估计方法称为“Bessel Tangent”方法。 Continue reading
与Bezier曲线的打断方法类似,B样条的打断利用了de Boor算法。并且结合B样条的强凸包性,我们可以推算出一种有效的B样条折线化方法。因此,本节是对前面几节内容的一个综合应用,后面,我的分享也主要面向应用。 Continue reading
我日常的编程语言是C++,看到周边的同事有学习python,围观了几个小例子,感觉python很不错,用起来很方便。所以我打算利用业余时间学习一些python的知识,如果学会了用GPIO 库控制我的树莓派做一些好玩的事情最好了。这篇文章里。我打算分享一下gdal python库的安装与pycharm下编写一个读取shapefile小程序的过程。 Continue reading
节点插入的含义是在不改变曲线形状的前提下,向节点序列(knot vector)中插入节点。节点插入的出发点与Bezier曲线的升阶一样,都是想增加控指点的数量以增加曲线的自由度。在不考虑改变曲线阶次的情况下,根据 m=p+n+1的等式,节点数加一,控制点数量加一。 Continue reading
求导是参数曲线非常最重要的功能之一。比如切线计算、曲线拟合等等。本节的主要目的是介绍B样条曲线求导的方法。(ps:因为内容里含有矩阵,如果没有正确显示请刷新一下)。 Continue reading
给定参数u,计算参数曲线上对应点的运算称为求值(Evalute)操作。反之,称之为求解(Solve)。这一节的目标是介绍德布尔(de Boor)在1972年提出的数值稳定的求值方法。它是德利斯特里奥(De Casteljau’s)算法的一般化形式。 Continue reading
在基函数的性质中我们已经学习过,B样条基函数\(N_{i,p}\)的作用范围是局部的,因此与Bezier曲线不同,移动控制点\(N_{i,p}\)对B样条的影响是局部的。而且,通过基函数“强凸包性”的特点,我们可以推导出若干样条曲线修型的技巧。 Continue reading
与Bezier曲线一样,B样条对于给定参数u求曲线上点的算法都不是通过计算基函数的值后带入控制点坐标计算的,而是通过de Boor算法计算,但是在曲线内插、拟合、优化等后续话题中,都需要带入基函数的值。因此本节的目标是介绍给定任意参数u,计算一组\(N_{i,p}(u)\)值的算法。 Continue reading
本节的目标为介绍B样条曲线的定义,以及其重要性质。这些性质,对样条曲线的应用起了决定性的作用。 Continue reading
B样条的形式与Bezier曲线的定义方式相同:\(C(u) = \sum_{i=0}^n N_{i,n}(u)P_i \) 但是其基函数的形式有很大的变化。重要的一个不同是,B样条的基函数是定义在一组参数区间上的。这一节,我将介绍B样条的基函数。 Continue reading
了解完一种特殊的nurbs曲线:贝塞尔曲线后,从本节开始,我将逐步介绍非均匀有理本样条曲线。理解bezier曲线的相关概念对NURBS的学习非常有帮助。本文的目标是介绍NURBS曲线的背景、主要应用和基本概念,并且介绍NURBS的前世今生。 Continue reading