From f73cf25fea2bd8582e2d6d818b93cbfa2e547760 Mon Sep 17 00:00:00 2001 From: treecity Date: Sun, 10 Apr 2011 14:13:54 +0000 Subject: [PATCH] =?utf8?q?[src]=20Umgestiegen=20auf=20Matlab=20(vorl=C3=A4?= =?utf8?q?ufig)=20[src]=20primitive=20Netzverwaltung=20f=C3=BCr=20Rechteck?= =?utf8?q?e=20entworfen=20[src]=20refine,=20plot,=20norm=20und=20space=20F?= =?utf8?q?unktionieren=20auf=20dem=20Gitter...?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@5 26120e32-c555-405d-b3e1-1f783fb42516 --- src/Aelements.m | 19 +++++++++++ src/exmpl_2DLShape.mat | Bin 0 -> 254 bytes src/exmpl_2DQuad.mat | Bin 0 -> 243 bytes src/exmpl_3DCube.mat | Bin 0 -> 269 bytes src/plotShape.m | 75 +++++++++++++++++++++++++++++++++++++++++ src/quad_norm.m | 43 +++++++++++++++++++++++ src/refineQuad.m | 51 ++++++++++++++++++++++++++++ src/test_refine.m | 24 +++++++++++++ 8 files changed, 212 insertions(+) create mode 100644 src/Aelements.m create mode 100644 src/exmpl_2DLShape.mat create mode 100644 src/exmpl_2DQuad.mat create mode 100644 src/exmpl_3DCube.mat create mode 100644 src/plotShape.m create mode 100644 src/quad_norm.m create mode 100644 src/refineQuad.m create mode 100644 src/test_refine.m diff --git a/src/Aelements.m b/src/Aelements.m new file mode 100644 index 0000000..2526bdf --- /dev/null +++ b/src/Aelements.m @@ -0,0 +1,19 @@ +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 + diff --git a/src/exmpl_2DLShape.mat b/src/exmpl_2DLShape.mat new file mode 100644 index 0000000000000000000000000000000000000000..cf8287e1d2af1ed1fc5d1809ce87680864a04417 GIT binary patch literal 254 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQgHY2i*PhE(NS#k5il@%`tma{Fjxa|#hk~<2?-qxNoESq z8ZIdu=sJ?lmgJ`JjP22rKYtcYIkV@;q$^1qtke|5k{GlTl30R!e0V$<82+qh4FMTp v3^(Ef+z76x#?FSyQ|8Z_JZtu>@Srm+DaB1kX3m%y5iv6|@fSmz1q&Yl!D>wz literal 0 HcmV?d00001 diff --git a/src/exmpl_2DQuad.mat b/src/exmpl_2DQuad.mat new file mode 100644 index 0000000000000000000000000000000000000000..eec428172f09e2c930f76b2658f173e25136910e GIT binary patch literal 243 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQgHY2i*PhE(NS#k5il@%`tma{Fqi>x#hk~<2?-nwNoESq z8ZIdu;CgE8Y^W?y%v@MhR~P7&7MJ9iWf&nVEKqFZAZlQAfRW+s16C`LZe6(U4amBg e42`F-eGD!RDh~ea)itwWQIF3V9tOux%y$8SP(ncf literal 0 HcmV?d00001 diff --git a/src/exmpl_3DCube.mat b/src/exmpl_3DCube.mat new file mode 100644 index 0000000000000000000000000000000000000000..a00867af717ca3ed6d408f11ebe9959159d34bd6 GIT binary patch literal 269 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQgHY2i*PhE(NS#k5il@%`tma{FxUfe#hk~<2?-qxNoESq z8ZIdu;Ci~5+0ahi1@uexxRHrQwYrbm8xKV>Sf>Aj_P+8f1) + 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 + diff --git a/src/quad_norm.m b/src/quad_norm.m new file mode 100644 index 0000000..8fd0c78 --- /dev/null +++ b/src/quad_norm.m @@ -0,0 +1,43 @@ +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 + + + diff --git a/src/refineQuad.m b/src/refineQuad.m new file mode 100644 index 0000000..3c199fc --- /dev/null +++ b/src/refineQuad.m @@ -0,0 +1,51 @@ +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 + diff --git a/src/test_refine.m b/src/test_refine.m new file mode 100644 index 0000000..0446fa0 --- /dev/null +++ b/src/test_refine.m @@ -0,0 +1,24 @@ + + 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 -- 2.47.3