wolffd@0: function h=plotgauss2d_old(mu, Sigma, plot_cross) wolffd@0: % PLOTGAUSS2D Plot a 2D Gaussian as an ellipse with optional cross hairs wolffd@0: % h=plotgauss2(mu, Sigma) wolffd@0: % wolffd@0: % h=plotgauss2(mu, Sigma, 1) also plots the major and minor axes wolffd@0: % wolffd@0: % Example wolffd@0: % clf; S=[2 1; 1 2]; plotgauss2d([0;0], S, 1); axis equal wolffd@0: wolffd@0: if nargin < 3, plot_cross = 0; end wolffd@0: [V,D]=eig(Sigma); wolffd@0: lam1 = D(1,1); wolffd@0: lam2 = D(2,2); wolffd@0: v1 = V(:,1); wolffd@0: v2 = V(:,2); wolffd@0: %assert(approxeq(v1' * v2, 0)) wolffd@0: if v1(1)==0 wolffd@0: theta = 0; % horizontal wolffd@0: else wolffd@0: theta = atan(v1(2)/v1(1)); wolffd@0: end wolffd@0: a = sqrt(lam1); wolffd@0: b = sqrt(lam2); wolffd@0: h=plot_ellipse(mu(1), mu(2), theta, a,b); wolffd@0: wolffd@0: if plot_cross wolffd@0: mu = mu(:); wolffd@0: held = ishold; wolffd@0: hold on wolffd@0: minor1 = mu-a*v1; minor2 = mu+a*v1; wolffd@0: hminor = line([minor1(1) minor2(1)], [minor1(2) minor2(2)]); wolffd@0: wolffd@0: major1 = mu-b*v2; major2 = mu+b*v2; wolffd@0: hmajor = line([major1(1) major2(1)], [major1(2) major2(2)]); wolffd@0: %set(hmajor,'color','r') wolffd@0: if ~held wolffd@0: hold off wolffd@0: end wolffd@0: end wolffd@0: