File Exchange

image thumbnail

Curvature of a 2D or 3D curve

version 1.2.3 (82.4 KB) by Are Mjaavatten
Calculates the local radius of curvature as well as the cumulative arc length and the curvature vector along a 1D curve in 2D or 3D space


Updated 26 Nov 2018

View License

Function circumcenter finds the radius R and the center of the circumscribed circle of a triangle in 3D space.

Function curvature calls circumcenter for every triplet P_i-1, P_i, P_i+1 of neighboring points along the curve. The curvature is defined as κ_i = 1/R_i. The curvature vector is k_i=ε_i/R, where ε_i is the unit vector in the direction from P_i to the center of the circle.

Note that this local calculation is sensitive to noise in the data.

The syntax is:

[L,R,K] = curvature(X)
X: array of column vectors for the curve coordinates. X may have two or three columns.
L: Arc length
R: Curvature radius
K: Curvature vector

Cite As

Are Mjaavatten (2019). Curvature of a 2D or 3D curve (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (8)

Yongkai liu

Very great

Matthew Wong: Three points are required to calculate the curvature and direction. Thus the arrays R and Kappa are not defined at the end points. I have chosen to use the value NaN at those points. I could have made the arrays smaller or used zeros, but NaN makes it easier to make nice plots.

I used parts of this function to solve the problem that initially inspired this function's creation. What does it mean if an 'e' value returns NaN? I believe that the sign of 'e' determines curve direction (either 1 or -1) but I'm not sure what the NaN means.



Yet another mixup: Correct heading this time


Uploaded wrong file in v. 1.2.1


Corrected minor bug in circumcenter function. It now runs faster for a single output (R) than for more. Results remain unchanged.


The code is simplified and about 30% faster. The derivation of the mathematical model is included as a separate document. The output is identical to version 1.1.


Forgot to update image


The direction of the curvature vector in version 1.0 was very wrong. Corrected in version 1.1


Improved image

MATLAB Release Compatibility
Created with R2014b
Compatible with any release
Platform Compatibility
Windows macOS Linux