2013-09-18 2 views
0

У меня есть массив точек x, y и соответствующих углов в этих указанных точках. Я хочу построить касательную линию в этих точках, я не могу понять, как действовать дальше.Как нарисовать касательную линию в определенных точках кривой в Matlab

http://postimg.org/image/s2y1pqqaj/

Как показано в командном окне 1-й столбец содержит х точек, 2-й столбец содержит Y точек и 3-й столбец соответствующий угол касательной. Рисунок 1 - график между точками x и y. Я знаю угол наклона i.e касательного угла в каждой точке, как вы можете видеть его в третьем столбце. Но не в состоянии понять, как реализовать его, чтобы нарисовать касательную в этих точках. Также уравнение для касательной линии 'y = mx + b', где m - наклон и b - перехват y. Благодарю вас.

Вот код

% Fill in parr a list of points and tangents to be used for display. 
% @param parr (x,y) Array of points. 
% @param tan Array of tangents. 
% @param lengthStep Distance between points. 

function [x y tan] = GetPointListForDisplay(m_Length,r1,r2,count) 

    global nn ca ce length; 

    GetLength = m_Length; 
    length = GetLength; 

    ca = GetCurvatureAtDeltaLength(0.0);  
    ce = GetCurvatureAtDeltaLength(length); 

    %if ((abs(ca) < 1.0/10000.0) && (abs(ce) < 1.0/10000.0)) 
    %end 

    radius = 1.0 ./ max(abs(ca), abs(ce)); 

    %if (radius < 0.1) 
    %end 

    nn = 3 + (180.0 * length/(2*pi*radius)); % Using modified formula of arc here 

    lengthStep = length/nn; 
    currLen = -lengthStep; 

    while (1) 

     currLen = currLen + lengthStep; 
     if (currLen > m_Length) 

      currLen = m_Length; 
     end 

     [x,y] = GetPointAtDeltaLength(currLen); 
     [tan] = GetTangentGridBearingAtDeltaLength(currLen); 

     z(count,1) = x; 
     z(count,2)= y; 
     z(count,3)= tan; 

     figure(1); 

     %plot(z(count,1).*sin(z(count,3)),z(count,2).*cos(z(count,3)),'b*'); 
     %plot(z(1,count).*cos(z(3,count)),z(2,count).*sin(z(3,count)),'b*'); 
     plot(z(count,1),z(count,2),'b*'); 
     %plot(z(1,count),z(2,count),'b*'); 
     hold on; 

     %pause(0.1); 

     count=count+1; 
     axis equal;  

     if (currLen >= m_Length) 
      z(count,1)= tan 
      break; 
     end 

    end 

end 

С уважением,

Mrinal

ответ

2
ii = index of the point where you want to get the tangent 
x1 = left bound of your tangent 
x2 = right bound of your tangent 
xT = z(ii,1) %argument where you want to get the tangent 
yT = z(ii,2) %corresponding y 
mT = tan(z(ii,3)) % corresponding slope 

Я предполагаю, что вы просто хотите одну касательную, то сюжет его, как это.

plot([x1,xT,x2] , [yT-mT*(xT-x1), yT, yT+mT*(x2-xT)]) 

В противном случае просто использовать петлю для более касательных с использованием ii в качестве переменной итерации.

Строка для уравнения будет

eq = strcat('y = ',num2str(mT),'*x + ',num2str(yT-mT*xT)) 
+0

Спасибо, но я не могу понять, как я могу использовать это уравнение в моем коде. Вот мой код, поскольку я использую различные функции, поэтому я не могу загрузить весь код, но функция, в которой я использую это, приведен ниже. Надеюсь, вы можете руководствоваться. Я загружаю свой код в ответы выше. – mony

+0

Ваш код не имеет отношения к вашему вопросу. Я просто использовал вашу матрицу 'z'. вы должны сами определить 'ii',' x1' и 'x2'. Попытайтесь понять, что я публикую, вам просто нужно поставить его под свой код. На самом деле я не получаю ваши пустые условия if выше. – thewaywewalk

+0

Хорошо. я сделаю так, как вы предложили, и извините, что я забыл стереть это условие, я сделаю это сейчас. – mony

Смежные вопросы