天天看點

開源項目推薦:我個人中意的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

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 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/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)問題專題——多種方法對比