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

Numpy和SciPy


大名鼎鼎的


NumPy python版本


https://github.com/numpy/numpy


https://github.com/dpilger26/NumCpp C++版本


NumCpp: Main Page C++文档


SciPy.org — SciPy.org


https://github.com/scipy/scipy


muparser


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


muparser - fast math parser library


SageMath


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


SageMath - Open-Source Mathematical Software System


GSL


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


GSL - GNU Scientific Library - GNU Project - Free Software Foundation


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


详情见我的博客:开源项目推荐:GSL科学计算函数库(GNU Scientific Library),实现VS2019源码编译_$firecat全宏的代码足迹$-CSDN博客


Octave


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


GNU Octave


Index of /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 — A Large Scale Non-linear Optimization Library


g2o


A General Framework for Graph Optimization


OpenSLAM.org


https://github.com/RainerKuemmerle/g2o


PCL


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


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


https://github.com/PointCloudLibrary/pcl


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是一个只有头文件的库。


http://eigen.tuxfamily.org


libeigen / eigen · GitLab 【推荐】


https://github.com/eigenteam/eigen-git-mirror


https://bitbucket.org/eigen/eigen/src/default/


CGAL


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


The Computational Geometry Algorithms Library


详情见我的博客:GIS系列专题(1):GDAL/Shapely/GEOS/2geom/Grass/Clipper/CGAL计算几何算法库_$firecat全宏的代码足迹$-CSDN博客


Geos


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


GEOS


详情见我的博客:GIS系列专题(1):GDAL/Shapely/GEOS/2geom/Grass/Clipper/CGAL计算几何算法库_$firecat全宏的代码足迹$-CSDN博客


Clipper


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


详情见我的博客:GIS系列专题(2):Clipper计算机图形库使用说明(Vatti‘s clipping algorithm)_$firecat全宏的代码足迹$-CSDN博客


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


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


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


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


http://www.wykobi.com/tutorial.html


Dlib


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


https://github.com/davisking/dlib


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


OGRE - Open Source 3D Graphics Engine | Home of a marvelous rendering engine


OGRE: API Reference Start Page Modules-Core-Math


https://github.com/OGRECave/ogre


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


https://libcinder.org/docs/ Math


NURBS


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


0、NURBS开源项目


http://libnurbs.sourceforge.net/old/ ++ https://sourceforge.net/projects/libnurbs/files/ nurbs++-3.0.11


https://download.csdn.net/download/zhai_ht/4983882 Nurbs3.0.11开源库vs2010源代码


https://www.sintef.no/projectweb/geometry-toolkits/sisl/ ++ https://github.com/SINTEF-Geometry/SISL SISL


https://www.gnu.org/software/gsl/doc/html/interp.html GSL


https://github.com/pradeep-pyro/tinynurbs


https://github.com/msteinbeck/tinyspline


https://github.com/mcneel/opennurbs


NURBS-Python


NURBS-Python :: Onur Rauf Bingol  


GitHub - orbingol/NURBS-Python: Object-oriented pure Python B-Spline and NURBS library


geomdl · PyPI


1、贝塞尔开源项目


https://github.com/oysteinmyrmo/bezier


https://github.com/stribor14/Bezier-cpp Fast and lightweight class for using the Bezier curves


贝塞尔曲线底漆 A Primer on Bézier Curves


https://github.com/Pomax/BezierInfo-2


Android 绘制N阶Bezier曲线      https://github.com/venshine/BezierMaker


三次Beizer曲线拟合算法


2、B样条开源项目


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


三次样条曲线拟合VC++


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


https://github.com/msteinbeck/tinyspline


https://github.com/bgrimstad/splinter


https://github.com/ttk592/spline


https://github.com/andrewwillmott/splines-lib


https://github.com/ejmahler/SplineLibrary


https://github.com/ebertolazzi/Splines


https://github.com/pyzhangxiang/qt-curve-editor


https://github.com/OpenTspline/OpenTspline  Open source T-spline library


★书籍推荐★


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


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


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


OPENGL几何数学库GLM


Khronos OpenGL® Registry - The Khronos Group Inc


https://github.com/KhronosGroup/OpenGL-Registry


https://glm.g-truc.net/


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


https://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 | TSP Solver and Generator


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


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


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


基于遗传算法的TSP算法


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


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


上一篇:使用STL中的list容器实现单链表的操作


下一篇:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)