⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vis_updt.m

📁 细胞生长结构可视化工具箱-MATLAB Toolbox1999.zip
💻 M
字号:
% Update positions of visualisation nodes
function Gcs = Vis_updt(Gcs)
d = 0.1; % radius of discs

ka=0.1; % attraction constant
kr=0.05; % repulsion coefficient

kipr = 0;%0.005; % coeff for ip space distance repulsive force - 0.015 generally works well


for visiter=1:10

	totalipl=0; % total ip distances
	totalvisl = 0; % vis total dis

	delta = zeros(size(Gcs.wvis));
	deltakipr = zeros(size(Gcs.wvis));

	visdist = zeros(size(Gcs.C));
	ipdist = zeros(size(Gcs.C));

	for i=1:(size(Gcs.wvis,1)-1)	% for each node
		for j=i+1:size(Gcs.wvis,1)	% consider all subsequent nodes
			e = norm(Gcs.wvis(i,:)-Gcs.wvis(j,:),2);
			visdist(i,j) = e;	
			visdist(j,i) = e;
			totalvisl = totalvisl+e;
			if e>d	% not touching
				if Gcs.C(i,j) % if connected calculate attraction
					delta(i,:) = delta(i,:)+(e-d)*ka*(Gcs.wvis(j,:)-Gcs.wvis(i,:))./e;
					delta(j,:) = delta(j,:)+(e-d)*ka*(Gcs.wvis(i,:)-Gcs.wvis(j,:))./e;
				end
			end
			if e<=3*d & e >2*d % close enough to repel
				delta(i,:) = delta(i,:) + 0.2*kr* (Gcs.wvis(i,:)-Gcs.wvis(j,:))./e;
				delta(j,:) = delta(j,:) + 0.2*kr* (Gcs.wvis(j,:)-Gcs.wvis(i,:))./e;
			elseif e<=2*d & e>d
				delta(i,:) = delta(i,:) + 0.5*kr* (Gcs.wvis(i,:)-Gcs.wvis(j,:))./e;
				delta(j,:) = delta(j,:) + 0.5*kr* (Gcs.wvis(j,:)-Gcs.wvis(i,:))./e;	
			elseif e<d
				delta(i,:) = delta(i,:) + kr* (Gcs.wvis(i,:)-Gcs.wvis(j,:))./e;
				delta(j,:) = delta(j,:) + kr* (Gcs.wvis(j,:)-Gcs.wvis(i,:))./e;
	 		end

			% Extra experimental repulsion force based on real link length in ip space 
			ipdis = norm(Gcs.w(i,:)-Gcs.w(j,:),Gcs.metric); % use metric set by user since this is an actual measurement in ip space
			totalipl = totalipl+ipdis;
			
			% simple model
			%deltakipr(i,:) = deltakipr(i,:) + kipr* (Gcs.wvis(i,:)-Gcs.wvis(j,:));
			%deltakipr(j,:) = deltakipr(j,:) + kipr* (Gcs.wvis(j,:)-Gcs.wvis(i,:));
			% push-pull model
			ipdist(i,j) = ipdis;
			ipdist(j,i) = ipdis;
		end
	end
	
	Gcs.wvis = Gcs.wvis+delta;
	
	% simple model
	%deltakipr = deltakipr./(totalipl/size(Gcs.C,1));	% normalise ip dist repulsive force
	%deltakipr = (deltakipr-(totalipl/size(Gcs.C,1)))

	% push-pull model
	meanvis = totalvisl./(size(Gcs.C,1).^2-size(Gcs.C,1));	% -size(Gcs.C,1) => do not count links to self!
	meanip = totalipl./(size(Gcs.C,1).^2-size(Gcs.C,1));
	
	for i=1:(size(Gcs.wvis,1)-1)
		for j=i+1:size(Gcs.wvis,1)
			deltakipr(i,:) = deltakipr(i,:) + kipr.*( (ipdist(i,j)./meanip)-(visdist(i,j)./meanvis) ) .*( (Gcs.wvis(i,:)-Gcs.wvis(j,:))./visdist(i,j) );
			deltakipr(j,:) = deltakipr(j,:) + kipr.*( (ipdist(j,i)./meanip)-(visdist(j,i)./meanvis) ) .*( (Gcs.wvis(j,:)-Gcs.wvis(i,:))./visdist(j,i));
		end
	end

	Gcs.wvis = Gcs.wvis+deltakipr;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -