2014-03-26 4 views
0

각 점이 서로 특정한 거리만큼 떨어져있는 곡선을 그리려합니다. 이제 불어서 내가 원하는 것을 보여 주지만, 나는 곡선과 같은 죄와 일정한 반경이 아닌 죄를 원합니다.각 점의 거리를 지정하여 곡선을 그립니다 (Matlab)

R = 50; %radius 
Gap = 0.1;   % gap between points 
Curve = 180;   
    rad = 0; 

n= pi*2*R*Curve/360/Gap;   % n is length of arc 
th = linspace(pi, rad ,n);  
x = R*cos(th)+R;  
y = R*sin(th)+100; 

PathDB.Route1.x(1:1001,1)=0; 
PathDB.Route1.y = (0:Gap:100)'; 
LengthY = length(PathDB.Route1.y); 

PathDB.Route1.x(1001:1001+length(x)-1,1)=x ; 
PathDB.Route1.y(LengthY:LengthY+length(y)-1) = y; 

LengthX = length(PathDB.Route1.x); 
LengthY = length(PathDB.Route1.y); 
PathDB.Route1.x(LengthX:LengthX+1000,1)=PathDB.Route1.x(LengthX,1); 
PathDB.Route1.y(LengthY:LengthY+1000,1)= (PathDB.Route1.y(LengthY,1):-Gap:0); 


plot(PathDB.Route1.x, PathDB.Route1.y); 
grid ;   
axis equal 

내가 원하는 것은 완벽한 곡선 대신에 0.1 곡선으로 표시된 곡선과 같은 죄를 더하고 싶습니다. 가난한 코딩 기술에 대해 유감스럽게 생각합니다. 이해하고 도와주세요.

아무쪼록 감사드립니다. 루이

+0

죄와 어떤 의미가 있습니까? 타원을 의미합니까? – patrik

답변

0

이 견고하고 싶다면

, 당신은 아마도 matlab에 기호 도구를 사용해야합니다. 당신은 함수 f를 가지고, 그것은 A와 B 사이의 곡선의 등거리 점을 플롯하려면 (예 기능과 사용 죄 (X)) 같은 것을 할 수 있습니다 :

sym x; 
    f = sin(x); 
    g = diff(f); %derivative of f 

    b=5; 
    a=0; 

    %check syntax on this part 
    arc_length = int(sqrt(1+g^2)); %create function for arc_length 

    Sc = arc_length(b)-arc_length(a); %calculate total arc length 
    n = 30 %number of points to plot (not including b) 
    Sdist = Sc/n; %distance between points 
    xvals = zeros(1,(n+1)); %initialize array of x values, n+1 to include point at b 

다음, 우리는 것입니다 간격을 통해 반복하여 등거리 점을 찾고 싶습니다. 이를 위해 우리는 각 S_ij를 취합니다. 여기서 i는 구간의 로우 엔드의 x 값을 나타내고 j는 하이 엔드를 나타냅니다. 우리는 i = a로 시작하고 i = b 일 때 멈 춥니 다. 아크 길이 방정식의 역함수를 사용하여 j에 대해 풀 수 있습니다. =>Sdist = arc_length(j) - arc_length(i) =>Sdist+arc_length(i)=arc_length(j). 이를 사용하여 j = arc_length_inverse(Sdist+arc_length(i))을 계산할 수 있습니다. 같은 것이 구현하는 한 가지 방법은 다음과 같습니다 : X 값이 배열로

arc_length_inv = finverse(arc_length); 
    i=a 
    xvals(1)=i; 
    for ii=1:n 
     j = arc_length_inv(Sdist+arc_length(i)); %calculate high end 
     i = j %make high end new low end 
     xvals(ii+1)=i; %put new low end value in x array 
    end 

, 식 (이 코드의 일부는 아마 조정 필요가 yvals=sin(xvals)plot(xvals,yvals)

을 계산할 수 있지만 수학 사운드해야한다 아크 길이는 http://en.wikipedia.org/wiki/Arc_length에서왔다. 수학적으로, 이것은 [a, b]에 적분 가능한 모든 함수와 arc_length 함수가 역함수를 가지는 함수에서 작동해야합니다; 즉 int() 및 finverse() 함수의 기능을 알지 못합니다.

견고성이 필요하지 않은 경우 특정 기능에 대해 다음 단계를 따르십시오. 수동으로 수학을 수행하고 수동으로 기능을 입력하십시오.

관련 문제