xF2S = xF2S';
end
+tmp = abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
+ sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]);
+hmin = min(tmp,[],2);
+hmax = max(tmp,[],2);
-len = min(abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
- sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]),[],2);
+% len = min(abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
+% sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]),[],2);
sizes = sqrt(sum(quadNorm(coo,ele,'w').^2,2));
+% max(sizes ~= hmin.*hmax)
+
x_var = sum((xF2S-repmat(sum(xF2S,1)/4,4,1)).^2)';
-ind = len.* sizes .* x_var;
+ind = hmin.* sizes .* x_var;
end
\ No newline at end of file
function plotShape(coordinates, elements, varargin)
%
% plotShape(coordinates,elements)
-% plotShape(coordinates,elements,'FLAG')
+% plotShape(coordinates,elements,'FLAG','VEC')
%
% Diese Funktion Zeichnet alle Vierecke mit ausgefuellten Flaechen.
% FLAG:
% b -> nur Kanten der Elemente einzeichnen
% n -> Normen auf ein Element einzeichnen (mit Laenge 1)
% a -> Normen auf ein Element einzeichnen (Laenge durch Flaecheninhalt)
+% s -> Flaechen werden gefaerbt, wobei VEC die Farben der Elemente angibt
%
% P.Schaefer
e = 1;
n = 0;
optargin = size(varargin,2);
-if(optargin>1)
+if(optargin>2)
error('Zu viele Argumente');
-elseif(optargin==1)
+elseif(optargin>=1)
if(ismember('b',varargin{1}))
e = 0;
+ elseif(ismember('s',varargin{1}))
+ if(optargin==2 && length(varargin{2})==size(elements,1))
+ e = 2;
+ color = reshape(varargin{2},length(varargin{2}),1);
+ maxc = max(color);
+ minc = min(color);
+ color = (color - minc)/maxc;
+% col = [color ones(length(color),2) ]
+
+ else
+ error('plotShape:COLOR','Optionale Parameter fuer Faerbung sind Falsch')
+ end
end
if(ismember('c',varargin{1}))
c = 1;
%% Flächen
eles = size(elements,1);
-if(e)
+if(e==1)
for idx = 1:eles
current = coordinates(elements(idx,[1:4,1])',:);
% current(3,:) = current(3,:)-current(1,:)+current(2,:);
fill3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet Oberflaeche
hold on
end
+elseif(e==2)
+ for idx = 1:eles
+ current = coordinates(elements(idx,[1:4,1])',:);
+% [current(:,1),current(:,2),current(:,3)]
+% col(idx,:)
+% current(3,:) = current(3,:)-current(1,:)+current(2,:);
+ fill3(current(:,1),current(:,2),current(:,3),color(idx)); % Zeichnet Oberflaeche
+% view(2)
+ hold on
+ end
else
for idx = 1:eles
current = coordinates(elements(idx,[1:4,1])',:);
global G_ref_N;
global G_ref_f2s;
global G_ref_t;
-global G_ref_s;
%Elementanzahl speichern
c_loop = size(elements,1);
if(isempty(ref))
break;
end
- figure(6)
- plotShape(G_ref_C,G_ref_E)
- plotMark(ref,G_ref_C,G_ref_E,'xg')
+% figure(6)
+% plotShape(G_ref_C,G_ref_E)
+% plotMark(ref,G_ref_C,G_ref_E,'xg')
+% title('Zum Verfeinern Markierte Elemente')
for ele = ref(randperm(length(ref))) %LOL Zufall bringts
- figure(5)
- plotShape(G_ref_C,G_ref_E)
- plotMark(ele,G_ref_C,G_ref_E,'xg')
+% figure(5)
+% plotShape(G_ref_C,G_ref_E)
+% plotMark(ele,G_ref_C,G_ref_E,'xg')
+% title('Entscheidene Nachbarelemente')
% # HangingNode Check
-% ele;
Nt = find(G_ref_N(ele,5:8)==0);
N = G_ref_N(ele,Nt);
N2t = find(N~=0);
N2 = N2(mod(N2tt,2)==1);
end
- plotMark(N2,G_ref_C,G_ref_E,'or')
+% plotMark(N2,G_ref_C,G_ref_E,'or')
if(~isempty(N2))
N3t = mod(find((G_ref_N(N2',:)==ele)')-1,4)+1; %Nachbarseiten
N4t = find(diag(G_ref_N(N2',(N3t + 4)'))~=0)'; %Nachbarn mit 2Nachbarn
if(~isempty(N4t))
for i = N4t %Elemente die noch verfeinert werden muessen
- if(N2(i)>length(G_ref_t)||G_ref_t(N2(i))<1); %eins der neuen Elemente
+ if( N2(i)>length(G_ref_t) || G_ref_t(N2(i))<1 ); %eins der neuen Elemente
error('refineQuad:check','Fehlerhafter Typ 0')
end
%Wie muss das Element verfeinert werden.
- N2
- N4t
- N3t
- N5t = G_ref_t(N2(i))
- mod(N3t(i),2)+3
+ N5t = G_ref_t(N2(i));
if(N5t == 1)
G_ref_t(N2(i))=mod(N3t(i),2)+3;
elseif(N5t == mod(N3t(i)+1,2)+3)
for ele = ref(randperm(length(ref))) %LOL Zufall bringts
% # HangingNode Check
- ele
Nt = find(G_ref_N(ele,5:8)==0);
N = G_ref_N(ele,Nt);
N2t = find(N~=0);
if(~isempty(N4t))
for i = N4t %Elemente die noch verfeinert werden muessen
if(N2(i)>length(G_ref_t)||G_ref_t(N2(i))<1); %eins der neuen Elemente
- figure(3)
- G_ref_t(ele)
+ figure(7)
+ title('Fehlerhaftes Element mit Nachbar')
plotShape(G_ref_C,G_ref_E)
plotMark([N2(i) ele],G_ref_C,G_ref_E)
error('refineQuad:refine','SKRIPTFEHLER: Dieses Element darf noch nicht verfeinert sein')
end
end
- disp 'called'
+% disp 'called'
continue;
end
end
% Wenn Alle Überprüfungen durchgelaufen sind
- ref
- G_ref_t(ref)
- G_ref_t(ele)
- figure(3)
- plotShape(G_ref_C,G_ref_E)
- plotMark(ele,G_ref_C,G_ref_E)
+% ref
+% G_ref_t(ref)
+% G_ref_t(ele)
+% figure(3)
+% plotShape(G_ref_C,G_ref_E)
+% plotMark(ele,G_ref_C,G_ref_E)
+% title('Netz vorm Verfeinern')
refineE(ele);
updateN(ele);
- figure(4)
- plotShape(G_ref_C,G_ref_E)
- plotMark(G_ref_f2s(ele,:),G_ref_C,G_ref_E)
+% figure(4)
+% plotShape(G_ref_C,G_ref_E)
+% plotMark(G_ref_f2s(ele,:),G_ref_C,G_ref_E)
+% title('Netz nach dem Verfeinern')
end
end
% plotShape(G_ref_C,G_ref_E);
-this = G_ref_N(ele,:)
+this = G_ref_N(ele,:);
% ele
split = G_ref_f2s(ele,:);
%An welchen Kanten habe ich Nachbarn
-S = find(mod((this(1:4)~=0).*(this(5:8)==0),2))' %Einen Nachbar (Single)
-D = find(this(5:8)~=0)' %Zwei Nachbarn (Double)
-G_ref_N([this(S) this(D)],:)
-MS = mod(find((G_ref_N(this(S),:)==ele)')-1,4)+1 %An welchen Kanten bin ich Nachbar
+S = find(mod((this(1:4)~=0).*(this(5:8)==0),2))'; %Einen Nachbar (Single)
+D = find(this(5:8)~=0)'; %Zwei Nachbarn (Double)
+% G_ref_N([this(S) this(D)],:);
+
+%An welchen Kanten bin ich Nachbar
+MSt = mod(find((G_ref_N(this(S),:)==ele)')-1,8)+1;
+MS = mod(MSt-1,4)+1; % (Single) %OHNE MOD????
MD = mod(find((G_ref_N(this([D D+4]),:)==ele)')-1,4)+1;
-MD = reshape(MD,length(MD)/2,2)
+MD = reshape(MD,length(MD)/2,2); % (Double)
G_ref_N(split,1:8) = 0;
if(split(1)==split(2))
- G_ref_N(split([1 3])',1:4) = [ 0 0 split(3) 0;split(1) 0 0 0];
+ G_ref_N(split([1 3])',1:4) = [ 0 0 split(3) 0;split(1) 0 0 0]; %Innere Beziehung
+
% Beziehungen fuer Kanten mit einem Nachbar
for i = 1:length(S)
- if(mod(S(i),2)==0)
+ if(mod(S(i),2)==0) %TODO was ist wenn ich selbst doppelNachbar an der Seite bin???
G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [split(S(i)) split(mod(S(i),4)+1)];
G_ref_N([split(S(i)) split(mod(S(i),4)+1)]',S(i))=this(S(i));
else
- G_ref_N(this(S(i)),MS(i)) = split(S(i));
+ G_ref_N(this(S(i)),MSt(i)) = split(S(i));
G_ref_N(split(S(i)),S(i)) = this(S(i));
end
end
G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [split(S(i)) split(mod(S(i),4)+1)];
G_ref_N([split(S(i)) split(mod(S(i),4)+1)]',S(i))=this(S(i));
else
- G_ref_N(this(S(i)),MS(i)) = split(S(i));
+ G_ref_N(this(S(i)),MSt(i)) = split(S(i));
G_ref_N(split(S(i)),S(i)) = this(S(i));
end
end