Mercurial > hg > human-echolocation
diff private/EDB1plotpath.m @ 0:90220f7249fc
Initial commit
author | Timos Papadopoulos <tp@isvr.soton.ac.uk> |
---|---|
date | Sat, 16 Nov 2013 18:25:24 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/private/EDB1plotpath.m Sat Nov 16 18:25:24 2013 +0000 @@ -0,0 +1,167 @@ +function EDB1plotpath(eddatafile,reflpathsfile,plotoptions) +% EDB1plotpath - Plots a model which is given in an eddatafile +% and one or more of the paths in an edreflpathsfile. +% +% Input parameters: +% eddatafile The input file. +% reflpathsfile The file with reflpaths. +% plotoptions The row in the reflpathsfile that should be plotted. +% +% Sources and receivers are taken from an sdatafile and an rdatafile, the file name of +% which is assumed to be similar to the eddatafile. +% +% Uses functions EDB1strpend, EDB1myvalueinput +% +% ---------------------------------------------------------------------------------------------- +% This file is part of the Edge Diffraction Toolbox by Peter Svensson. +% +% The Edge Diffraction Toolbox is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) any later version. +% +% The Edge Diffraction Toolbox is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License along with the +% Edge Diffraction Toolbox. If not, see <http://www.gnu.org/licenses/>. +% ---------------------------------------------------------------------------------------------- +% Peter Svensson (svensson@iet.ntnu.no) 20090708 +% +% EDB1plotpath(eddatafile,reflpathsfile,plotoptions); + +%-------------------------------------------------------------- +% Read the input files + +[eddatafilepath,eddatafile,fileext] = fileparts(eddatafile); +eddatafile = [eddatafile,fileext]; +Filestem = EDB1strpend(eddatafile,'_eddata'); + +[reflpathsfilepath,reflpathsfile,fileext] = fileparts(reflpathsfile); +reflpathsfile = [reflpathsfile,fileext]; + +if ~isempty(eddatafilepath) + eval(['load ',eddatafilepath,filesep,eddatafile]) +else + eval(['load ',eddatafile]) +end + +if ~isempty(reflpathsfilepath) + eval(['load ',reflpathsfilepath,filesep,reflpathsfile]) +else + eval(['load ',reflpathsfile]) +end + +plotsources = 1; +plotreceivers = 1; + +%-------------------------------------------------------------- + +ncornersperplanevec = double(ncornersperplanevec); +if plotsources + sdatafile = [eddatafilepath,Filestem,'_sdata.mat']; + if exist(sdatafile) == 2 + eval(['load ',sdatafile]) + else + error(['ERROR: The sdata file named ',sdatafile,' could not be opened']) + end +end +if plotreceivers + rdatafile = [eddatafilepath,Filestem,'_rdata.mat']; + if exist(rdatafile) == 2 + eval(['load ',rdatafile]) + else + error(['ERROR: The rdata file named ',rdatafile,' could not be opened']) + end +end + +%-------------------------------------------------------------- + +[ncorners,slask] = size(corners); +[nedges,slask] = size(edgecorners); +[nplanes,slask] = size(planenvecs); + +planelist = 1:nplanes; + +% viewpos = EDB1myvalueinput('From which point do you want to watch the model? (x y z, or az el, with spaces inbetween) ',-1); +viewpos = [1 0 0]; +axis equal + +hold off +for ii = 1:nedges + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + plot3(corners(iv,1),corners(iv,2),corners(iv,3)) + if ii ==1 + view(viewpos) + hold + end +end + +if plotsources == 1 + plot3(sources(:,1),sources(:,2),sources(:,3),'*'); +end + +if plotreceivers == 1 + plot3(receivers(:,1),receivers(:,2),receivers(:,3),'ro'); +end + +%--------------------------------------------------------------- +% Plot the path + +pathtype = pathtypevec(plotoptions,:) +reflpath = reflpaths(plotoptions,:) +norder =sum(pathtype ~= 0); +nspecorder = sum(pathtype == 115); +speccols = find(pathtype == 115); +diffcols = find(pathtype == 100); + + +x1 = sources(1,1); +y1 = sources(1,2); +z1 = sources(1,3); + +for ii = 1:nspecorder+1 + x2 = specextradata(plotoptions,1+3*(ii-1)); + y2 = specextradata(plotoptions,2+3*(ii-1)); + z2 = specextradata(plotoptions,3+3*(ii-1)); + plot3(x2,y2,z2,'o') + line([x1;x2],[y1;y2],[z1;z2]); + x1 = x2; + y1 = y2; + z1 = z2; +end + +x2 = receivers(1,1); +y2 = receivers(1,2); +z2 = receivers(1,3); +line([x1;x2],[y1;y2],[z1;z2]); + +% Print the involved plane numbers + +reflplanes = reflpath(speccols); + +for ii = reflplanes + midpoint = mean(corners(planecorners(ii,1:ncornersperplanevec(ii)),:)); + endpoint = midpoint + planenvecs(ii,:); + text(endpoint(1),endpoint(2),endpoint(3),int2str(ii)); +end + +% Print the involved edge numbers + +if ~isempty(diffcols) + diffedges = reflpath(diffcols); + for ii = diffedges + midpoint = mean(corners(edgecorners(ii,1:2),:)); + text(midpoint(1),midpoint(2),midpoint(3),int2str(ii)); + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + h = plot3(corners(iv,1),corners(iv,2),corners(iv,3)); + set(h,'LineWidth',3) + + + end + +end