Hello, I'm looking for some help with a function I've made to return the Frenet-Serret vectors for a 'track' defined by a set of x,y,z coordinates. It seems to work except for the curvature which is certainly wrong. I've tested it with a simple unit circle and the curvature is 0.01, not 1. Any help would be much appreciated.
Thanks
Code:function [T,N,B,k,t] = frenet(x,y,z), % Frenet - Serret Vecotrs % T = Tangent % N = Normal % B = Binormal % k = curvature % t = torsion % If only x and y inputted, set z to all zeros if nargin == 2, z = zeros(size(x)); end % If x, y and z are row vectors, make them colums x = x(:); y = y(:); z = z(:); %Set up a dr vector dx = gradient(x); dy = gradient(y); dz = gradient(z); dr = [dx dy dz]; % The tangent vector for i=1:size(x) T(i,:) = dr(i,:)/norm(dr(i,:),2); end dTx = gradient(T(:,1)); dTy = gradient(T(:,2)); dTz = gradient(T(:,3)); dT = [dTx dTy dTz]; % The Normal vecotr for j=1:size(x) N(j,:) = dT(j,:)/norm(dT(j,:),2); end % The binormal vector B = cross(T,N); dBx = gradient(B(:,1)); dBy = gradient(B(:,2)); dBz = gradient(B(:,3)); dB = [dBx dBy dBz]; % Curvature for i=1:length(x) k(i) = norm(dT(i,:),2); t(i) = norm(dB(i,:),2); end


LinkBack URL
About LinkBacks