samer@4: % mt_get_transmat_near - Get transition matrix near given point in information space. samer@4: % samer@4: % mt_get_transmat_near :: samer@4: % mt_system ~'Melody Triangle system structure', samer@4: % natural ~'voice Id (1 or greater)', samer@4: % K:natural ~'size of transition matrix', samer@4: % real ~'X-coordinate', samer@4: % real ~'Y-coordinate' samer@4: % -> [[K,K]] ~'transition matrix', samer@4: % [[1,3]] ~'information coordinates'. samer@4: % samer@4: % A transition matrix will be chosen at random from amongst the ones samer@4: % within a certain radius of the target point. samer@4: % The selected transition matrix will be shown using mt_show_transmat, samer@4: samer@4: samer@6: function [T,P,I]=mt_get_transmat_near(Sys,Id,K,X,Y,MinRad) samer@4: logK=log(K); samer@4: normpos = Sys.map([X;Y])'; samer@4: target = normpos*logK; samer@4: tmats = Sys.transmats{K}; samer@4: info = Sys.info{K}; samer@4: L = size(info,1); samer@6: if nargin<6, MinRad=0.01; end samer@4: samer@4: % distance from target samer@4: d2 = sum((info(:,1:2) - repmat(target,L,1)).^2,2); samer@6: Mask = d2<=max(min(d2)*2,MinRad); samer@4: samer@4: M = find(Mask); samer@4: % J = M(argmax(info(M,3))); samer@15: J = M(randnat(length(M))); samer@4: T = tmats(:,:,J); samer@4: I = info(J,:); samer@4: %Mask=2*int16(Mask); Mask(J)=1; samer@4: %set(Sys.hScat{K},'CDATA',Mask); % scatc(info,Mask,16); rotate3d on; samer@4: %figure(50); title(sprintf('pos: %.2f, %.2f',normpos(1), normpos(2))); samer@9: if Sys.shuffle samer@9: perm=randperm(K); samer@9: T=T(perm,perm); samer@9: end samer@4: mt_show_transmat(Id,T,I); samer@4: if nargin>1, P=Sys.revmap(I(1:2)'/logK); end samer@4: end