--- /dev/null
+function A = Aelements(coordinates, elements)
+% This function calculates the Sum of all Surfaces
+%
+% A=Aelements(coordinates,elements)
+%
+% P.Schaefer
+
+elles = size(elements,1);
+A=0;
+for i = 1:elles
+ tri = elements(i,:);
+ a = (coordinates(tri(1),:)-coordinates(tri(2),:));
+ b = (coordinates(tri(1),:)-coordinates(tri(3),:));
+ A1 = norm(cross(a',b'));
+ A = A+ A1;
+end
+
+end
+
--- /dev/null
+function plotShape(coordinates, elements, varargin)
+%
+% 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'
+%
+% P.Schaefer
+
+%% Parameterueberpruefung
+c = 0;
+e = 1;
+n = 0;
+optargin = size(varargin,2);
+if(optargin>1)
+ error('Zu viele Argumente');
+elseif(optargin==1)
+ if(ismember('b',varargin{1}))
+ e = 0;
+ end
+ if(ismember('c',varargin{1}))
+ c = 1;
+ end
+ if(ismember('n',varargin{1}))
+ n = 1;
+ end
+end
+
+%% Koordinaten einzeichnen
+if(c)
+ scatter3(coordinates(:,1),coordinates(:,2),coordinates(:,3),'r');
+ hold on
+end
+
+%% Dreiecke einzeichnen
+eles = size(elements,1);
+if(e)
+ for idx = 1:eles
+ current = coordinates(elements(idx,[1:3,3,1])',:);
+ current(3,:) = current(3,:)-current(1,:)+current(2,:);
+ fill3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet Oberflaeche
+ hold on
+ end
+else
+ for idx = 1:eles
+ current = coordinates(elements(idx,[1:3,3,1])',:);
+ current(3,:) = current(3,:)-current(1,:)+current(2,:);
+ plot3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet nur Kanten
+ hold on
+ end
+end
+
+if(n)
+ anorm = quad_norm(coordinates,elements);
+ for idx = 1:eles
+ current = sum(coordinates(elements(idx,[2,3])',:),1)/2;
+ current = [current ; current+anorm(idx,:)];
+ plot3(current(:,1),current(:,2),current(:,3),'r'); % Zeichnet Oberflaeche
+ scatter3(current(2,1),current(2,2),current(2,3),'xr');
+ hold on
+ end
+end
+
+xlabel 'x'
+ylabel 'y'
+zlabel 'z'
+
+hold off
+
+end
+
--- /dev/null
+function n = quad_norm(coordinates, elements,varargin)
+%
+% norm = tri_norm(coordinates, elements)
+% norm = tri_norm(coordinates, elements, 'FLAG')
+%
+% This function builds the norm for every triangle
+%
+% P.Schaefer
+
+%% Parameterueberpruefung
+w = 1;
+
+optargin = size(varargin,2);
+if(optargin>1)
+ error('Zu viele Argumente');
+elseif(optargin==1)
+ if(ismember('w',varargin{1}))
+ w = 0;
+ end
+end
+
+ %Numbers needed
+ s_ele = size(elements,1);
+
+
+%% calculate the Norm
+ n = zeros(size(elements));
+ for i = 1:s_ele
+ % normalized Vector on every triangle
+ tri = elements(i,:);
+ a = (coordinates(tri(2),:)-coordinates(tri(1),:));
+ b = (coordinates(tri(3),:)-coordinates(tri(1),:));
+ N = cross(a',b');
+ if(w)
+ N = N/norm(N);
+ end
+ n(i,:) = N;
+ end
+
+end
+
+
+
--- /dev/null
+function [coordinates,elements] = refineQuad(coordinates,elements,type)
+
+c_loop = size(elements,1);
+
+for i = 1:c_loop
+ c_ele = size(elements,1);
+ c_coo = size(coordinates,1);
+
+
+ el = elements(i,:);
+ 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+2,:) = newc2;
+ elements(i,:) = [el(1),c_coo+1,c_coo+2];
+
+ newc3 = (coordinates(el(2),:)+coordinates(el(3),:))/2;
+ coordinates(c_coo+3,:) = newc3;
+ elements(c_ele+1,:) = [c_coo+1,el(2),c_coo+3];
+ elements(c_ele+2,:) = [c_coo+2,c_coo+3,el(3)];
+
+ newc4 = newc2+(coordinates(el(2),:)-coordinates(el(1),:));
+ newc5 = newc1+(coordinates(el(3),:)-coordinates(el(1),:));
+ coordinates(c_coo+4,:) = newc4;
+ coordinates(c_coo+5,:) = newc5;
+ elements(c_ele+3,:) = [c_coo+3,c_coo+4,c_coo+5];
+ end
+end
+end
+
--- /dev/null
+
+ eles = size(elements,1);
+
+ if not(exist('r_times'))
+ r_times = 1;
+ end
+
+ if not(exist('r_type'))
+ r_type = 4;
+ end
+
+ if(r_type > 3)
+ marked = round(3*rand(1,eles));
+ elseif(r_type < 0)
+ return;
+ else
+ marked = ones(1,eles)*r_type;
+ end
+
+ for i = 1:r_times
+ [coordinates,elements]=refineQuad(coordinates,elements,marked);
+ end
+
+ clear i eles
\ No newline at end of file