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