www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/xynodpos.m
function [xnpos,ynpos] = xynodpos(table_node,order,depth) %XYNODPOS Computes graphical position of a node in a tree. % [XNPOS,YNPOS] = XYNODPOS(TABLE_NODE,ORDER,DEPTH) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96. % Last Revision: 28-Apr-2009. % Copyright 1995-2009 The MathWorks, Inc. % SPECIAL CASES %-------------- if (order<=1) || (depth==0) xnpos = zeros(1,depth+1); if depth > 0 pasy = 0.8/depth; y = 0.1+pasy*(0:depth-1)'; ynpos = [y y+pasy]; else ynpos = 0.1; end return end % Create nodes indices table. %---------------------------- ord_ind = 1:order; order1 = order+1; N = size(table_node,2); xnpos = zeros(order1,N); node_exist = (table_node ~= -1); % Setting the width of the subtrees. % The initial width is 1. %----------------------------------------- xnpos(1,node_exist) = 1; % Left Nodes Indices. %-------------------- i_Ltree = (order.^(0:depth)-1)/(order-1)+1; for d=depth-1:-1:0 n_d = i_Ltree(d+1); i_fath = n_d+(0:order^d-1); i_left_child = (i_fath-1)*order+2; for k=1:order^d i_f = i_fath(k); i_lc = i_left_child(k); if table_node(i_lc) ~= -1 for i=1:order xnpos(i,i_f) = sum(xnpos(ord_ind,i_lc+i-1)); end else up = 1; i_asc = i_f; while table_node(i_asc) == -1 up = up+1; i_asc = floor((i_asc-2)/order)+1; end xnpos(1,i_lc:i_lc+order-1) = 1/(order^up); end end end % Now the rows 1:order contain the width (depth) of the subtrees. % % Elimination of the nodes for the maximum depth. %------------------------------------------------ if N > 1, xnpos(:,(N-1)/order+1:size(xnpos,2)) = []; end % Normalization : the total width is 1. %-------------------------------------- xnpos(ord_ind,:) = xnpos(ord_ind,:)/sum(xnpos(ord_ind,1)); % Setting the minimum values of the abscissae of the subtrees. %------------------------------------------------------------- xnpos(order1,i_Ltree) = -0.5*ones(size(i_Ltree)); for d=1:depth-1 n_d = i_Ltree(d+1); for p=n_d+1:n_d+order^d-1 xnpos(order1,p) = sum(xnpos((1:order1),p-1)); end end % Now the row order+1 contains the abscisses of the left extremity % of the subtrees. % Change the width of the subtrees. %---------------------------------- xnpos(ord_ind,:) = cumsum(xnpos(ord_ind,:)) - xnpos(ord_ind,:)/2; xnpos(ord_ind,:) = xnpos(ord_ind,:)+xnpos((order1)*ones(1,order),:); % Suppress the last row. %----------------------- xnpos = xnpos(1:order,:); xnpos = [0 xnpos(:)']; % Y position. %------------ pasy = 0.8/depth; y = 0.1+pasy*(0:depth-1)'; ynpos = [y y+pasy];