2014-11-23 1 views
0

저는 실제 측정에서 얻은 평면 곡선에서 일련의 (x, y) 샘플을 얻었습니다. 아마도 약간 시끄럽고 일정한 간격을 유지하지 못할 것입니다. 나는 전체 시리즈를 그릴 경우어떻게 이산 샘플에서 곡률 반경을 계산합니까?

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 ... 

, 그것은 좋은 타원형처럼 보이지만 내가 자세히 본다면, 선은 아마도 잡음 비트 위글을 보인다.

기본 타원의 곡률 반경 추정치를 추출하는 방법은 무엇입니까?

모든 프로그래밍 언어로 괜찮겠습니다.

답변

2

로저 스탠은 여기에 몇 가지 MATLAB 코드를 주었다

나는이 기능을하기 위해 조금 verbosed

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

: 그것은 있지만,

# 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 

내 목적을 위해 아주 잘 작동하는 것 같다을 예를 들어 매우 이상한 답을 준다. 동일 선상의 점. 그러나 그들이 약간의 소음이 추가 된 좋은 곡선에서왔다면, 거의 완료되었습니다.

아주 쉽게 다른 언어에 적응해야하지만, \는 MATLAB/Octave의 '의사 역수를 사용하여 해결'이므로 의사 역수를 계산하여이를 복제 할 수있는 선형 대수 라이브러리가 필요합니다.

1

코드와 피팅 알고리즘에 대한 설명을 포함하여 this이 원하는 것을 설명한다고 생각합니다.

1

데이터와 타원 방정식의 차이의 최소 제곱을 만족하는 타원을 계산할 수 있다고 생각합니다. 그런 다음 타원의 장축과 단축을 사용하십시오. Here은 Google 검색 후 찾은 신문입니다.