How do I calculate radius of curvature from discrete samples?

久未见 提交于 2020-01-16 14:33:30

问题


I've got a series of (x,y) samples from a plane curve, taken from real measurements, so presumably a bit noisy and not evenly spaced in time.

x = -2.51509  -2.38485  -1.88485  -1.38485  -0.88485  -0.38485   0.11515 0.61515   1.11515   1.61515 ...

y =  -48.902  -48.917  -48.955  -48.981  -49.001  -49.014  -49.015  -49.010 -49.001  -48.974 ...

If I plot the whole series, it looks like a nice oval, but if I look closely, the line looks a bit wiggly, which is presumably the noise.

How would I go about extracting an estimate of the radius of curvature of the underlying oval?

Any programming language would be fine!


回答1:


Roger Stafford gave some MATLAB code here:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/152405

Which I verbosed a bit to make this function:

# given a load of points, with x,y coordinates, we can estimate the radius
# of curvature by fitting a circle to them using least squares.
function [r,a,b]=radiusofcurv(x,y)
  # translate the points to the centre of mass coordinates
  mx = mean(x);
  my = mean(y);
  X = x - mx; Y = y - my; 

  dx2 = mean(X.^2);
  dy2 = mean(Y.^2);

  # Set up linear equation for derivative and solve
  RHS=(X.^2-dx2+Y.^2-dy2)/2; 
  M=[X,Y];
  t = M\RHS;

  # t is the centre of the circle [a0;b0]
  a0 = t(1); b0 = t(2);

  # from which we can get the radius
  r = sqrt(dx2+dy2+a0^2+b0^2); 

  # return to given coordinate system
  a = a0 + mx;
  b = b0 + my; 

endfunction

It seems to work quite well for my purposes, although it gives very strange answers for e.g. collinear points. But if they're from a nice curve with a bit of noise added, job pretty much done.

It should adapt pretty easily to other languages, but note that \ is MATLAB/Octave's 'solve using pseudo-inverse' function, so you'll need a linear algebra library that can calculate the pseudo inverse to replicate it.




回答2:


I think this describes what you want, including code and a description of the fitting algorithm.




回答3:


I think you can calculate the ellipse which satisfies the least-square of the difference between your data and ellipse equation. Then use the major and minor axis of the ellipse. Here is a paper I found after a Google search.



来源:https://stackoverflow.com/questions/27095399/how-do-i-calculate-radius-of-curvature-from-discrete-samples

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!