samer@4: % mt_get_transmat_at - Get transition matrix nearest given point in information space. samer@0: % samer@0: % mt_get_transmat_at :: samer@0: % mt_system ~'Melody Triangle system structure', samer@0: % natural ~'voice Id (1 or greater)', samer@0: % K:natural ~'size of transition matrix', samer@0: % real ~'X-coordinate', samer@0: % real ~'Y-coordinate' samer@0: % -> [[K,K]] ~'transition matrix', samer@0: % [[1,3]] ~'information coordinates'. samer@0: % samer@0: % The selected transition matrix will be shown using mt_show_transmat, samer@0: samer@3: function [T,P,I]=mt_get_transmat_at(Sys,Id,K,X,Y) samer@3: logK=log(K); samer@0: normpos = Sys.map([X;Y])'; samer@3: target = normpos*logK; samer@0: tmats = Sys.transmats{K}; samer@0: info = Sys.info{K}; samer@0: L = size(info,1); samer@0: samer@0: % distance from target samer@0: d2 = sum((info(:,1:2) - repmat(target,L,1)).^2,2); samer@5: M = find(d2==min(d2)); samer@15: J = M(randnat(length(M))); samer@0: T = tmats(:,:,J); samer@0: I = info(J,:); samer@9: if Sys.shuffle samer@9: perm=randperm(K); samer@9: T=T(perm,perm); samer@9: end samer@3: mt_show_transmat(Id,T,I); samer@3: if nargin>1, P=Sys.revmap(I(1:2)'/logK); end samer@0: end