% Many thanks to Kurt Ditzel % Acuity Research for this bug fix... function p = calc_cubic_coefs(f1, f2) % % use symbolic solver % c11 = f1(1); c12 = f1(2); c13 = f1(3); c21 = f1(4); c22 = f1(5); c23 = f1(6); c31 = f1(7); c32 = f1(8); c33 = f1(9); d11 = f2(1); d12 = f2(2); d13 = f2(3); d21 = f2(4); d22 = f2(5); d23 = f2(6); d31 = f2(7); d32 = f2(8); d33 = f2(9); %syms c11 c12 c13 c21 c22 c23 c31 c32 c33; %syms d11 d12 d13 d21 d22 d23 d31 d32 d33; %syms f1 f2 a X Y D T; %f1 = [c11, c12, c13, c21, c22, c23, c31, c32, c33]; %f2 = [d11, d12, d13, d21, d22, d23, d31, d32, d33]; % % disp('X') % X = a*f1 + (1-a)*f2; % pretty(X) % disp('Y'); % Y = reshape(X,3,3).'; % pretty(Y) % D = det(Y); % disp('D'); % %pretty(D); % % disp('Collected coeffs of a') % T = collect(simplify(D),a) % solve for given the points % % p = p = [(d11*c22*d33+c21*d13*d32-c21*d13*c32-c21*c13*d32+c21*c13*c32-c21*d12*d33+c21*d12*c33+c21*c12*d33-c21*c12*c33+c11*c22*c33-c11*c22*d33+d11*c23*c32-d11*c23*d32-d11*d23*c32-d11*c22*c33-c11*d22*c33-c11*c23*c32+d11*d22*c33-d21*d13*d32+c11*c23*d32+c11*d22*d33+d21*d12*d33-d31*d13*c22-d31*c13*d22+d31*c13*c22+d31*d12*c23+d31*c12*d23-d31*c12*c23-c31*d13*d22+c31*d13*c22+c31*c13*d22-c31*c13*c22+c31*d12*d23-c31*d12*c23-c31*c12*d23+c31*c12*c23+d21*d13*c32+d21*c13*d32-d21*c13*c32-d21*d12*c33-d21*c12*d33+d21*c12*c33+d31*d13*d22-d31*d12*d23+c11*d23*c32-d11*d22*d33+d11*d23*d32-c11*d23*d32), +(-2*d11*c22*d33-2*c21*d13*d32+c21*d13*c32+c21*c13*d32+2*c21*d12*d33-c21*d12*c33-c21*c12*d33+c11*c22*d33-d11*c23*c32+2*d11*c23*d32+2*d11*d23*c32+d11*c22*c33+c11*d22*c33-2*d11*d22*c33+3*d21*d13*d32-c11*c23*d32-2*c11*d22*d33-3*d21*d12*d33+2*d31*d13*c22+2*d31*c13*d22-d31*c13*c22-2*d31*d12*c23-2*d31*c12*d23+d31*c12*c23+2*c31*d13*d22-c31*d13*c22-c31*c13*d22-2*c31*d12*d23+c31*d12*c23+c31*c12*d23-2*d21*d13*c32-2*d21*c13*d32+d21*c13*c32+2*d21*d12*c33+2*d21*c12*d33-d21*c12*c33-3*d31*d13*d22+3*d31*d12*d23-c11*d23*c32+3*d11*d22*d33-3*d11*d23*d32+2*c11*d23*d32), +(-3*d21*d13*d32-c11*d23*d32+3*d11*d23*d32-c21*d12*d33-c31*d13*d22+d11*c22*d33+d21*d13*c32+c21*d13*d32-d11*d23*c32+3*d21*d12*d33+c11*d22*d33+d11*d22*c33-d21*c12*d33+d21*c13*d32-3*d11*d22*d33-d11*c23*d32-d31*c13*d22+d31*c12*d23+3*d31*d13*d22-d31*d13*c22+c31*d12*d23-3*d31*d12*d23-d21*d12*c33+d31*d12*c23), -d21*d12*d33+d11*d22*d33-d11*d23*d32+d21*d13*d32-d31*d13*d22+d31*d12*d23];