--- /dev/null
+function sol = F_ort(x, y, delta)
+
+ xd = x(1) -delta(1);
+ xyd=x(2)-y(1)-delta(2);
+ yd = y(2)+delta(3);
+
+ sol = -G00(0.5,[y(2) x(1)]',[-delta(3) delta(1)],xyd)...
+ -xd*xyd*G00(-0.5,[x(2) y(2)],[yd -delta(3)],xd)...
+ +xd*g0(0.5,y(2),-delta(3),norm([xd xyd]))...
+ -yd*xyd*G00(-0.5,[x(1) x(2)],[delta(1) yd],-yd)...
+ +yd*g0(0.5,x(1),delta(1),norm([xyd yd]));
+
+end
+
--- /dev/null
+function sol = F_par(x, y, delta)
+
+ xyd=x-y-delta(1:2);
+
+ sol = xyd(1)*xyd(2)*G(-0.5,x,y+delta(1:2),delta(3)...
+ -xyd(1)*g(0.5,x(1),y(1)+delta(1),norm([xyd(2) delta(3)]))...
+ -xyd(2)*g(0.5,x(2),y(2)+delta(2),norm([xyd(1) delta(3)]))...
+ +1/3*(xyd(1)^2+xyd(2)^2+delta(3)^2)^(1.5));
+
+end
+
--- /dev/null
+function sol = G00(p,y,x,lambda)
+
+ sol = nan;
+ yx = y-x;
+ if(p==-1.5)
+ if(lambda==0)
+ sol = -norm(yx)/prod(yx);
+ else
+ sol = sign(prod(yx))/(2*abs(lambda))*...
+ acos(-2*prod(yx)^2/prod((yx).^2+lambda^2)+1);
+ end
+ elseif(p==-0.5)
+ sol = (2*p*lambda^2*G(p-1,y,x,lambda)...
+ + sum( yx(1).*g(p,y(2),x(2),norm([xy(1) lambda])))...
+ + sum( yx(2).*g(p,y(1),x(1),norm([xy(2) lambda]))))/(2*p+2);
+ end
+
+end
--- /dev/null
+function sol = g0(p, y, x, lambda)
+
+ sol = nan;
+ yx = y-x;
+ if(lambda~=0)
+ if(p==0.5)
+ sol = yx/2*((yx^2 + lambda^2)^0.5)+lambda^2/2*arsinh(yx/abs(lambda));
+ elseif(p==0)
+ sol = yx;
+ elseif(p==-0.5)
+ sol = arsinh(yx/abs(lambda));
+ elseif(p==-1)
+ sol = atan(yx/abs(lambda));
+ elseif(p==-1.5)
+ sol = yx/(lambda^2)*((yx^2 + lambda^2)^-0.5);
+ else
+ sol = yx*((yx^2 + lambda^2)^p)+2*p*lambda^2*g(p-1,y,x,lambda);
+ end
+ else
+ if(p==-0.5)
+ sol = sign(yx)*log(abs(yx));
+ else
+ sol = (yx).*abs(yx).^(2*p)/(2*p+1);
+ end
+ end
+end
+
+function sol = arsinh(x) %inline
+ sol = log(x+norm([x 1]));
+end
+
% plotShape(coordinates,elements)
% plotShape(coordinates,elements,'FLAG')
%
-% Diese Funktion Zeichnet alle Vierecke mit ausgef llten F l c h e n , wenn als
-% dritter Parameter noch 'f' angegeben wird. Werden nur die Kanten
-% gezeichnet. Wenn 'c' angegeben wird werden auch die Ecken als kleine rote
-% Kreise dargestellt
-% Flag: 'c', 'b' oder 'cb' bzw. 'bc'
+% Diese Funktion Zeichnet alle Vierecke mit ausgefuellten Flaechen.
+% FLAG:
+% c -> Koordinaten als rote Kreise darstellen
+% b -> nur Kanten der Elemente einzeichnen
+% n -> Normen auf ein Element einzeichnen (mit Laenge 1)
+% a -> Normen auf ein Element einzeichnen (Laenge durch Flaecheninhalt)
%
% P.Schaefer
if(ismember('c',varargin{1}))
c = 1;
end
- if(ismember('n',varargin{1}))
+ if(ismember('a',varargin{1}))
+ n = 2;
+ elseif(ismember('n',varargin{1}))
n = 1;
end
end
end
if(n)
- anorm = quad_norm(coordinates,elements);
+ if(n==2)
+ anorm = quad_norm(coordinates,elements,'w');
+ else
+ anorm = quad_norm(coordinates,elements);
+ end
for idx = 1:eles
current = sum(coordinates(elements(idx,[2,3])',:),1)/2;
current = [current ; current+anorm(idx,:)];
% norm = tri_norm(coordinates, elements)
% norm = tri_norm(coordinates, elements, 'FLAG')
%
-% This function builds the norm for every triangle
-%
+% Diese Funktion Berechnet die Orthogonalen mit Laenge 1 über alle Flächen
+% FLAG:
+% w -> Laenge entspricht Flaecheninhalt
% P.Schaefer
%% Parameterueberpruefung
if(type(i)==0)
continue;
elseif(type(i)==1)
- newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
- coordinates(c_coo+1,:) = newc;
- elements(i,3) = c_coo+1;
-
- newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
- coordinates(c_coo+2,:) = newc;
-
- elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
- elseif(type(i)==2)
- newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
- coordinates(c_coo+1,:) = newc;
- elements(i,3) = c_coo+1;
-
- newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
- coordinates(c_coo+2,:) = newc;
-
- elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
- elseif(type(i)==3)
newc1 = (coordinates(el(2),:)+coordinates(el(1),:))/2;
newc2 = (coordinates(el(3),:)+coordinates(el(1),:))/2;
coordinates(c_coo+1,:) = newc1;
coordinates(c_coo+4,:) = newc4;
coordinates(c_coo+5,:) = newc5;
elements(c_ele+3,:) = [c_coo+3,c_coo+4,c_coo+5];
+ elseif(type(i)==2)
+ newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
+ coordinates(c_coo+1,:) = newc;
+ elements(i,3) = c_coo+1;
+
+ newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
+ coordinates(c_coo+2,:) = newc;
+
+ elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
+ elseif(type(i)==3)
+ newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
+ coordinates(c_coo+1,:) = newc;
+ elements(i,3) = c_coo+1;
+
+ newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
+ coordinates(c_coo+2,:) = newc;
+
+ elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
end
end
end
if(r_type > 3)
marked = round(3*rand(1,eles));
- elseif(r_type < 0)
+ elseif(r_type <= 0)
return;
else
marked = ones(1,eles)*r_type;