开源项目推荐:我个人中意的Python/C++数学库(★精品收藏★)

2,823 阅读6分钟

Numpy和SciPy

大名鼎鼎的

numpy.org/ python版本

github.com/numpy/numpy

github.com/dpilger26/N… C++版本

dpilger26.github.io/NumCpp/doxy… C++文档

scipy.org/ 

github.com/scipy/scipy

 

muparser

许多应用程序需要解析数学表达式。该库的主要目的是提供一种快速简便的方法。 muParser是一个用C ++编写的可扩展的高性能数学表达式解析器库。 它的工作原理是将数学表达式转换为字节码并预先计算表达式的常量部分。

beltoforion.de/article.php…

 

SageMath

是一个免费的、开源的数学软件系统,采用GPL协议。它整合了许多开源Python包,采用Python语言编写,但也支持其他语言。它的目标是创造一个可变的开源软件以替代Magma MapleMathematicaMatlab 。Sage不仅是一个软件,也是一个编程环境,提供命令行模式、笔记本模式,可以编写编译型程序和解释型程序。目前Sage支持LinuxMac OS XBSDSolaris平台。

www.sagemath.org/

 

GSL

(GNU Scientific Library)是一个开源的科学计算的函数库,功能非常强大。有超过1000个函数,该库提供了关于数学计算的很多方面,Matlab的大部分函数几乎都能借助它实现,可以在数值计算中省却很多事情。

www.gnu.org/software/gs…

ftp://ftp.gnu.org/gnu/gsl/

详情见我的博客:blog.csdn.net/libaineu200…

 

Octave

是一种编程语言,旨在解决线性和非线性的数值计算问题。4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序移植到Octave。同时与C++,QT等接口较Matlab更加方便。

www.gnu.org/software/oc…

mirrors.ustc.edu.cn/gnu/octave/

 

Ceres Solver

is an open source C++ library for modeling and solving large, complicated optimization problems. 来自谷歌.

Ceres Solver是一个开源C ++库,用于建模和解决大型复杂的优化问题。具有边界约束的非线性最小二乘问题;一般无约束优化问题。Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。Ceres官网上的文档非常详细地介绍了其具体使用方法,相比于另外一个在slam中被广泛使用的图优化库G2O,ceres的文档可谓相当丰富详细(没有对比就没有伤害,主要是G2O资料太少了,对比起来就显得ceres的很多)

ceres-solver.org/

 

g2o

A General Framework for Graph Optimization

openslam-org.github.io/g2o.html

github.com/RainerKuemm…

 

PCL

The Point Cloud Library (PCL) is a standalone, large scale, open project for 2D/3D image and point cloud processing.

pointclouds.org/

github.com/PointCloudL…

 

Eigen

is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

Eigen是一个C++开源线性代数库:提供矩阵的线性代数运算。Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。它的License是MPL2。它支持多平台。Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用。Eigen是一个只有头文件的库。

eigen.tuxfamily.org

gitlab.com/libeigen/ei… 【推荐】

github.com/eigenteam/e…

bitbucket.org/eigen/eigen…

 

CGAL

全称就是Computational Geometry Algorithms Library,从名称就可以看出,CGAL就是计算几何的开源库。CGAL是用C++语言写的计算几何最经典的开源库。

www.cgal.org/index.html

详情见我的博客:blog.csdn.net/libaineu200…

 

Geos

全称就是Geometry Engine Open Source,从名称就可以看出,Geos就是判断几何体的过程。Geos是用C++语言写的处理计算几何的开源库。

trac.osgeo.org/geos/

详情见我的博客:blog.csdn.net/libaineu200…

 

Clipper

Clipper库是目前计算机图形领域广为使用的图形处理库,可以用于解决平面二维图形的多边形简化、布尔运算和偏移处理,在CAD、加工路径与3D打印方面都有着比较重要的应用。

详情见我的博客:blog.csdn.net/libaineu200…

 

Armadillo:C++ library for linear algebra & scientific computing

数据类型都定好了,基本运算的算符也重载了,用起来跟Matlab差不多

arma.sourceforge.net/

 

wykobi:几何计算数学库A C++ library of efficient, robust and simple to use C++ 2D/3D oriented computational geometry routines. 

www.wykobi.com/tutorial.ht…

 

Dlib

A toolkit for making real world machine learning and data analysis applications in C++

github.com/davisking/d…

 

OGRE:scene-oriented, flexible 3D engine written in C++

www.ogre3d.org/

ogrecave.github.io/ogre/api/la… Modules-Core-Math

github.com/OGRECave/og…

 

Cinder is a free and open source library for professional-quality creative coding in C++

libcinder.org/docs/ Math

 

curve fitting (peak fitting) software

github.com/wojdyr/fity…

 

NURBS, B-Splines, and Bézier curves/Bessel Curve Fitting贝塞尔曲线拟合

0、NURBS开源项目

libnurbs.sourceforge.net/old/ ++ htt…

download.csdn.net/download/zh…

www.sintef.no/projectweb/… ++ github.com/SINTEF-Geom…

www.gnu.org/software/gs…

github.com/pradeep-pyr…

github.com/msteinbeck/…

github.com/mcneel/open…

onurraufbingol.com/NURBS-Pytho…
1、贝塞尔开源项目

github.com/oysteinmyrm…

github.com/stribor14/B… Fast and lightweight class for using the Bezier curves

pomax.github.io/bezierinfo/… A Primer on Bézier Curves

github.com/Pomax/Bezie…

Android 绘制N阶Bezier曲线      github.com/venshine/Be…

三次Beizer曲线拟合算法

2、B样条开源项目

三次B样条曲线拟合算法  三次参数样条,优势是光滑连接。拟合轮廓效果还是可以,较之Beizer,B样条将一些细节描述的很好,很多细节之处都贴近原轮廓,但是有一些不足之处,可以看到对直线拟合效果不是很好。三次样条插值(Cubic Spline Interpolation)简称Spline插值,是通过一系列形值点的一条光滑曲线,数学上通过求解三弯矩方程组得出曲线函数组的过程。

三次样条曲线拟合VC++

Opencv 三次样条曲线(Cubic Spline)插值

github.com/msteinbeck/…

github.com/bgrimstad/s…

github.com/ttk592/spli…

github.com/andrewwillm…

github.com/ejmahler/Sp…

github.com/ebertolazzi…

github.com/pyzhangxian…

github.com/OpenTspline…  Open source T-spline library

★书籍推荐★

计算几何算法与实现(Visual C++版)》 孔令德,三次参数样条曲线

计算机图形学——基于MFC三维图形开发》 孔令德

《数值计算方法与算法(第三版)》 张韵华

 

OPENGL几何数学库GLM

www.khronos.org/registry/Op…

github.com/KhronosGrou…

glm.g-truc.net/

github.com/g-truc/glm OpenGL Mathematics (GLM) is a header only C++ mathematics library

github.com/recp/cglm OpenGL Mathematics (glm) for C

glm常用的数据类型

vec2 二维向量
vec3 三维向量
vec4 四维向量
mat2 二阶矩阵
mat3 三阶矩阵
mat4 四阶矩阵
常用的函数

glm::radians() 角度制转弧度制
glm::translate() 创建一个平移矩阵,第一个参数是目标矩阵,第二个参数是平移的方向向量
glm::rotate() 创建一个将点绕某个轴旋转x弧度的旋转矩阵,第一个参数是弧度,第二个参数是旋转轴
glm::scale() 创建一个缩放矩阵,第一个参数是目标矩阵,第二个参数是缩放系数

TSP(Travelling Salesman Problem)经典问题
旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 
旅行商问题是图论中最著名的问题之一,即“已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。该问题通常被认为是一个NP完全问题。时间复杂度为O(n!)。因此,通常n的值不是很大。
tspsg.info/en

动态规划经典问题--TSP问题

动态规划法求解TSP问题 C++

求解TSP问题的几种经典智能算法比较(附完整代码)

基于遗传算法的TSP算法

TSP旅行商问题各种算法实现

旅行商(TSP)问题专题——多种方法对比