]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] unter para Bedinungen werden immer die richtigen Werte generiert
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Sat, 21 May 2011 10:40:51 +0000 (10:40 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Sat, 21 May 2011 10:40:51 +0000 (10:40 +0000)
[src] weitere Anpassungen auf 4 Punkte pro Element
[src] PlotShape zeichnet nun auch die erste Koordinate ein (Übergangsstest)

git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@30 26120e32-c555-405d-b3e1-1f783fb42516

src/Aelements.m
src/build_A.cpp
src/exmpl_2DLShape.mat
src/plotShape.m
src/quad_norm.m
src/test_solveError.m

index 2526bdffa5374ee4eb04d0b1ad099330081b14b3..aad35f5061932b66c4825aa0ca630905e1070efa 100644 (file)
@@ -10,7 +10,7 @@ A=0;
 for i = 1:elles
     tri = elements(i,:);
     a = (coordinates(tri(1),:)-coordinates(tri(2),:));
-    b = (coordinates(tri(1),:)-coordinates(tri(3),:));
+    b = (coordinates(tri(1),:)-coordinates(tri(4),:));
     A1 = norm(cross(a',b'));
     A = A+ A1;
 end
index d880ef5b639e3d7e6776a1fc5afd6b3cc0f8cc5c..49175fdde8e943abce4f8b4c460e0520660a069b 100644 (file)
@@ -20,7 +20,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
        //sicherheitsabfragen zu Datengroessen\r
        if (nrhs != 2)\r
-               mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx3))");\r
+               mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx4))");\r
        if (nlhs > 1)\r
                mexErrMsgTxt("has only one output argument");\r
 \r
@@ -31,8 +31,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                mexErrMsgTxt("expected coordinates (Nx3)");\r
        int em = mxGetM(prhs[1]);\r
        int en = mxGetN(prhs[1]);\r
-       if (en != 3)\r
-               mexErrMsgTxt("expected elements (Mx3)");\r
+       if (en != 4)\r
+               mexErrMsgTxt("expected elements (Mx4)");\r
        //Vorbereitung der Daten\r
 \r
        plhs[0] = mxCreateDoubleMatrix(em, em, mxREAL);\r
@@ -42,6 +42,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
        double * x0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * x1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * x2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * x3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * xn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * xa = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
@@ -49,6 +50,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
        double * y0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * y1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * y2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * y3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * yn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
        double * ya = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
@@ -72,9 +74,13 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                x1[1] = C[cm + (int) E[em + j] - 1];\r
                x1[2] = C[2 * cm + (int) E[em + j] - 1];\r
 \r
-               x3[0] = C[(int) E[2 * em + j] - 1];\r
-               x3[1] = C[cm + (int) E[2 * em + j] - 1];\r
-               x3[2] = C[2 * cm + (int) E[2 * em + j] - 1];\r
+               x2[0] = C[(int) E[2 * em + j] - 1];\r
+               x2[1] = C[cm + (int) E[2 * em + j] - 1];\r
+               x2[2] = C[2 * cm + (int) E[2 * em + j] - 1];\r
+\r
+               x3[0] = C[(int) E[3 * em + j] - 1];\r
+               x3[1] = C[cm + (int) E[3 * em + j] - 1];\r
+               x3[2] = C[2 * cm + (int) E[3 * em + j] - 1];\r
 \r
                for (i = 0; i<3;++i)\r
                        xa[i] = x1[i] - x0[i];\r
@@ -119,20 +125,21 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        dt[i] = - x0[i];\r
                        }else{\r
                                for (i = 0; i<3;++i)\r
-                                       dt[i] = - x1[i];\r
+                                       dt[i] = - x3[i];\r
                        }\r
                }else{\r
                        if(xb[rxb]>0){\r
                                for (i = 0; i<3;++i)\r
-                                       dt[i] = - x3[i];\r
+                                       dt[i] = - x1[i];\r
                        }else{\r
-                               //for (i = 0; i<3;++i)\r
-                               //      d[i] = - x2[i];\r
-                               printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+                               for (i = 0; i<3;++i)\r
+                                       dt[i] = - x2[i];\r
+                               //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
                        }\r
                }\r
 \r
-\r
+               //for (i=0;i<3;++i)\r
+               //      dt[i] = 0;\r
 \r
 \r
                // printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]);\r
@@ -146,9 +153,13 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        y1[1] = C[cm + (int) E[em + k] - 1];\r
                        y1[2] = C[2 * cm + (int) E[em + k] - 1];\r
 \r
-                       y3[0] = C[(int) E[2 * em + k] - 1];\r
-                       y3[1] = C[cm + (int) E[2 * em + k] - 1];\r
-                       y3[2] = C[2 * cm + (int) E[2 * em + k] - 1];\r
+                       y2[0] = C[(int) E[2 * em + k] - 1];\r
+                       y2[1] = C[cm + (int) E[2 * em + k] - 1];\r
+                       y2[2] = C[2 * cm + (int) E[2 * em + k] - 1];\r
+\r
+                       y3[0] = C[(int) E[3 * em + k] - 1];\r
+                       y3[1] = C[cm + (int) E[3 * em + k] - 1];\r
+                       y3[2] = C[2 * cm + (int) E[3 * em + k] - 1];\r
 \r
                        for (i = 0; i<3;++i)\r
                                ya[i] = y1[i] - y0[i];\r
@@ -189,30 +200,32 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                                d[i] = dt[i] + y0[i];\r
                                }else{\r
                                        for (i = 0; i<3;++i)\r
-                                               d[i] = dt[i] + y1[i];\r
+                                               d[i] = dt[i] + y3[i];\r
                                }\r
                        }else{\r
                                if(yb[ryb]>0){\r
                                        for (i = 0; i<3;++i)\r
-                                               d[i] = dt[i] + y3[i];\r
+                                               d[i] = dt[i] + y1[i];\r
                                }else{\r
-                                       //for (i = 0; i<3;++i)\r
-                                               //d[i] += y2[i];\r
-                                       printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+                                       for (i = 0; i<3;++i)\r
+                                               d[i] = dt[i] + y2[i];\r
+                                       //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
                                }\r
                        }\r
 \r
-                       for (i = 0; i<3;++i)\r
-                               d[i] = y0[i]-x0[i];\r
+               //      for (i = 0; i<3;++i)\r
+               //              d[i] = y0[i]-x0[i];\r
 \r
                        printf("(%d,%d)",rx,ry);\r
                        if (rx == ry) {\r
                                printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
-                               printf("[%.2f,%.2f@%.2f,%.2f]\n",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
+                               printf("[%.2f,%.2f@%.2f,%.2f]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
+                               printf("%d%d %.1f %.1f %.1f|||",j,k,dt[0],dt[1],dt[2]);\r
+                               printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                if (rxa == rya) {\r
                                        //printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
-                                       printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+                                       //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                        tmp = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]),\r
                                                        fabs(ya[rxa]), fabs(yb[rxb]), d[rxa], d[rxb], d[rx]);\r
                                        //       printf("%d%d|%.2f\n",j,k,tmp);\r
index cf8287e1d2af1ed1fc5d1809ce87680864a04417..feb1a9435624f9e922a173ddea746e683980b0e6 100644 (file)
Binary files a/src/exmpl_2DLShape.mat and b/src/exmpl_2DLShape.mat differ
index 8aedde403c1650f85c90d4bd949706c94d2bd712..8016864e7e6b2ba2803d86b3556e0b03a4d0e448 100644 (file)
@@ -39,19 +39,19 @@ if(c)
     hold on
 end
 
-%% Dreiecke einzeichnen
+%% Flächen
 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,:);
+        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
 else
     for idx = 1:eles
-        current = coordinates(elements(idx,[1:3,3,1])',:);
-        current(3,:) = current(3,:)-current(1,:)+current(2,:);
+        current = coordinates(elements(idx,[1:4,1])',:);
+        current(3,:) = current(3,:)-current(1,:)+current(2,:);
         plot3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet nur Kanten
         hold on
     end
@@ -64,8 +64,8 @@ if(n)
         anorm = quad_norm(coordinates,elements);
     end
     for idx = 1:eles
-        current = sum(coordinates(elements(idx,[2,3])',:),1)/2;
-        current = [current ; current+anorm(idx,:)];
+        current = sum(coordinates(elements(idx,[2,4])',:),1)/2;
+        current = [current ; current+anorm(idx,:);coordinates(elements(idx,1)',:)];
         plot3(current(:,1),current(:,2),current(:,3),'r'); % Zeichnet Oberflaeche
         scatter3(current(2,1),current(2,2),current(2,3),'xr');
         hold on
index 6dbfe796e2ec2fa7bda47f39f30ccbaff1f3eb9a..2bd8cb8c9af495a6ae5f6f9a48a1be0a7cc21a6b 100644 (file)
@@ -25,12 +25,12 @@ end
     
 
 %%  calculate the Norm
-    n = zeros(size(elements));
+    n = zeros(size(elements,1),3);
     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),:));
+        b = (coordinates(tri(4),:)-coordinates(tri(1),:));
         N = cross(a',b');
         if(w)
             N = N/norm(N);
index 5f2c47a9060c62f71b1495ab6e7bf32a427fb9a4..4eca86498f829ce9dd05f2b28f2e8a9161e96fad 100644 (file)
@@ -3,7 +3,8 @@
 load exmpl_2DLShape\r
 \r
 % coordinates = coordinates(:,[ 1 3 2]);\r
-% elements(2,:) = elements(2,[ 2 3 1]);\r
+elements(2,:) = elements(2,[ 3 4 1 2]);\r
+elements(3,:) = elements(3,[ 3 2 1 4]);\r
 \r
 % [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
 % [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r