Changeset 3063


Ignore:
Timestamp:
02/20/10 22:12:00 (15 years ago)
Author:
Eric.Larour
Message:

New flagedges, better display.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/partition/flagedges.m

    r3039 r3063  
    1 function [flags middles]=flagedges(x,y,partition,adjacencymatrix);
    2 %FLAGEDGES return a vector of boolean flags that indicate whether a node is on the edge of a partition.
    3 %          needs partition vector and adjacencymatrix in inputs.
     1function [xsegments ysegments]=flagedges(elements,x,y,partition);
     2%FLAGEDGES return pairs of x,y segments, delimiting partitions.
    43%
    5 %
    6 %         Usage: [flags middlegrids]=flagedges(x,y,partition,adjacencymatrix);
     4%         Usage: [xsegments ysegments]=flagedges(elements,x,y,partition)
    75%
    86
    9 %number of grids
    10 numberofgrids=length(partition);
     7xsegments=[];
     8ysegments=[];
    119
    12 %initialize flags
    13 flags=zeros(numberofgrids,1);
     10for i=1:size(elements,1),
     11        m1=partition(elements(i,1));
     12        m2=partition(elements(i,2));
     13        m3=partition(elements(i,3));
     14        x1=x(elements(i,1));
     15        x2=x(elements(i,2));
     16        x3=x(elements(i,3));
     17        y1=y(elements(i,1));
     18        y2=y(elements(i,2));
     19        y3=y(elements(i,3));
    1420
    15 middles=zeros(0,2);
    16 
    17 %go through grids, and figure out which grid is connected to a grid belonging to another partition, flag it.
    18 for i=1:numberofgrids,
    19 
    20         %some feedback
    21         if i==1,
    22                 fprintf('    flagedges progress report: %5.2f %s',i/numberofgrids*100,'%');
    23         elseif mod(i,1000),
    24                 fprintf('\b\b\b\b\b\b\b');
    25                 fprintf('%5.2f %s',i/numberofgrids*100,'%');
     21        if (m1~=m2) & (m1~=m3) & (m2~=m3),
     22                xmiddle=(x1+x2+x3)/3;
     23                ymiddle=(y1+y2+y3)/3;
     24                xsegments=[xsegments; (x1+x2)/2 xmiddle];
     25                xsegments=[xsegments; (x1+x3)/2 xmiddle];
     26                xsegments=[xsegments; (x2+x3)/2 xmiddle];
     27                ysegments=[ysegments; (y1+y2)/2 ymiddle];
     28                ysegments=[ysegments; (y1+y3)/2 ymiddle];
     29                ysegments=[ysegments; (y2+y3)/2 ymiddle];
    2630        end
    2731
    28         %already flag, move on
    29         if flags(i),
    30                 continue;
     32        if (m1==m2) & (m1~=m3),
     33                xsegments=[xsegments; (x1+x3)/2 (x2+x3)/2];
     34                ysegments=[ysegments; (y1+y3)/2 (y2+y3)/2];
    3135        end
    32        
    33         grids=adjacencymatrix(:,i); grids=find(grids);
    34        
    35         part_i=partition(i);
    36         part_connected=partition(grids);
     36        if (m1==m3) & (m2~=m3),
     37                xsegments=[xsegments; (x1+x2)/2 (x2+x3)/2];
     38                ysegments=[ysegments; (y1+y2)/2 (y2+y3)/2];
     39        end
    3740
    38         index=find(part_i~=part_connected);
    39         if ~isempty(index),
    40                 grids_on_edge=grids(index);
    41                 flags(grids_on_edge)=1;
    42                 flags(i)=1;
    43                 for j=1:length(grids_on_edge),
    44                         middles(end+1,:)=[(x(grids_on_edge(j))+x(i))/2 (y(grids_on_edge(j))+y(i))/2];
    45                 end
     41        if (m2==m3) & (m1~=m3),
     42                xsegments=[xsegments; (x1+x2)/2 (x1+x3)/2];
     43                ysegments=[ysegments; (y1+y2)/2 (y1+y3)/2];
    4644        end
    4745end
     46
Note: See TracChangeset for help on using the changeset viewer.