]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] mex_build_V kann nun Q und QE auf par und ort rechnen
authorPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 21 Mar 2013 21:54:23 +0000 (22:54 +0100)
committerPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 21 Mar 2013 21:54:23 +0000 (22:54 +0100)
src/mex_build_V.cpp
src/slpRectangle.cpp
src/slpRectangle.hpp

index 8ffde9e655954d59882509f64af8173c6a9f3d53..5f6a5c259495b014b2568879a1e9e73ab4281acf 100644 (file)
@@ -249,7 +249,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                break;\r
        case 3: // Analytisch oder Qy[1]x2\r
                ctypeP = cParO3;\r
-               ctypeO = cOrtO1;\r
+               ctypeO = cOrtO3;\r
                break;\r
        case 4: // Analytisch oder Qx1x2\r
                ctypeP = cParO4;\r
index efdd77b1267f094c1ad81b10ed3372e157d3aa6b..70c303f5fd1ed2b8eb76b5c82f119a3b983454bb 100644 (file)
@@ -51,11 +51,12 @@ double inline max(double x, double y) {
 double inline min(double x, double y) {\r
        return x > y ? y : x;\r
 }\r
+\r
 /*\r
  * kleinere Seiten nach vorn und dadurch kleinerer Durchmesser nach vorn\r
  */\r
-void inline switch_site(double& b, double& d, double& t, double& v, double& d1,\r
-               double& d2) {\r
+void inline switch_site_par(double& b, double& d, double& t, double& v,\r
+               double& d1, double& d2) {\r
        double tmp = 0;\r
 \r
        // kleine Seite nach vorn (x1 y1)\r
@@ -75,8 +76,34 @@ void inline switch_site(double& b, double& d, double& t, double& v, double& d1,
        }\r
 }\r
 \r
-void inline switch_dim(double& b, double& d, double& t, double& v, double& d1,\r
-               double& d2) {\r
+/*\r
+ * kleinere Seiten nach vorn und dadurch kleinerer Durchmesser nach vorn\r
+ */\r
+void inline switch_site_ort(double& b, double& d, double& t, double& v,\r
+               double& d1, double& d2, double& d3) {\r
+       double tmp = 0;\r
+\r
+       // kleine Seite nach vorn (x2 y2)\r
+       if (d > t) {\r
+               tmp = d;\r
+               d = t;\r
+               t = tmp;\r
+               d2 = -d2;\r
+       }\r
+\r
+       // kleine Seite nach vorn (x1 y3)\r
+       if (b > v) {\r
+               tmp = b;\r
+               b = v;\r
+               v = tmp;\r
+               tmp = -d1;\r
+               d1 = -d3;\r
+               d3 = tmp;\r
+       }\r
+}\r
+\r
+void inline switch_dim_par(double& b, double& d, double& t, double& v,\r
+               double& d1, double& d2) {\r
        //\r
        if (b * b + t * t > d * d + v * v) {\r
                double tmp = 0;\r
@@ -147,7 +174,6 @@ double inline dist2_ort(double b, double d, double t, double v, double d1,
        return dis1 * dis1 + dis2 * dis2 + dis3 * dis3;\r
 }\r
 \r
-\r
 /*\r
  * gibt den Abstand in einer Richtung zum Quadrat zurueck\r
  */\r
@@ -163,7 +189,6 @@ double inline dist_s2(double b, double t, double d1) {
        return dis1 * dis1;\r
 }\r
 \r
-\r
 double inline f_par(double x1, double x2, double y1, double y2, double d1,\r
                double d2, double d3) {\r
        return 1.\r
@@ -369,12 +394,17 @@ double inline F_ort(double x1, double x2, double y2, double y3, double d1,
 \r
 double inline FY1Y2_par(double x1, double x2, double y1, double y2, double d1,\r
                double d2, double d3) {\r
-       return G_AY1Y2(-0.5, y1 + d1, y2 + d2, x1, x2, d3);\r
+       return G_AY1Y2(-0.5, y1, y2, x1 - d1, x2 - d2, d3);\r
 }\r
 \r
-double inline FY2X2_par(double y1, double x1, double y2, double x2, double d1,\r
+//double inline FY2X2_par(double y1, double x1, double y2, double x2, double d1,\r
+//             double d2, double d3) {\r
+//     return G_AY2X2(y1 + d1, y2 + d2, x1, x2, d3);\r
+//}\r
+\r
+double inline FY2Y3_ort(double x1, double x2, double y2, double y3, double d1,\r
                double d2, double d3) {\r
-       return G_AY2X2(y1 + d1, y2 + d2, x1, x2, d3);\r
+       return G_AY1Y2(-0.5, y2 , y3 , x2-d2, -d3, x1-d1);\r
 }\r
 \r
 /*\r
@@ -472,10 +502,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2,
        double tmp = 0;\r
 \r
        //kurze Seite nach vorn\r
-       switch_site(b, d, t, v, d1, d2);\r
+       switch_site_par(b, d, t, v, d1, d2);\r
 \r
        //kurze Achse nach vorn\r
-//     switch_dim(b, d, t, v, d1, d2);\r
+//     switch_dim_par(b, d, t, v, d1, d2);\r
 \r
        if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_par(b, d, t, v, d1, d2, d3))\r
                return intQ4<f_par>(b, d, t, v, d1, d2, d3);\r
@@ -488,30 +518,13 @@ double cOrtO2(double b, double d, double t, double v, double d1, double d2,
        double tmp = 0, dis2 = 0;\r
 \r
        //kurze Seite nach vorn\r
-//     switch_site(b, d, t, v, d1, d2);\r
-       if (d > t) {\r
-               tmp = d;\r
-               d = t;\r
-               t = tmp;\r
-               d2 = -d2;\r
-       }\r
-\r
-       if (b > v) {\r
-               tmp = b;\r
-               b = v;\r
-               v = tmp;\r
-               tmp = -d1;\r
-               d1 = -d3;\r
-               d3 = tmp;\r
-       }\r
+       switch_site_ort(b, d, t, v, d1, d2, d3);\r
 \r
        //kurze Achse nach vorn\r
-//     switch_dim(b, d, t, v, d1, d2);\r
+//     switch_dim_par(b, d, t, v, d1, d2);\r
 \r
-       if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b,d,t,v,d1,d2,d3)){\r
-//             mexPrintf("Was used!\n");\r
+       if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b, d, t, v, d1, d2, d3))\r
                return intQ4<f_ort>(b, d, t, v, d1, d2, d3);\r
-       }\r
 \r
        return intA4<F_ort>(b, d, t, v, d1, d2, d3);\r
 }\r
@@ -520,10 +533,10 @@ double cParO3(double b, double d, double t, double v, double d1, double d2,
                double d3, double* zeta) {\r
 \r
        //kurze Seite nach vorn\r
-       switch_site(b, d, t, v, d1, d2);\r
+       switch_site_par(b, d, t, v, d1, d2);\r
 \r
        //kurze Achse nach vorn\r
-//     switch_dim(b, d, t, v, d1, d2);\r
+//     switch_dim_par(b, d, t, v, d1, d2);\r
 \r
        if (zeta[1] * zeta[1] * (b * b + d * d) < dist2_par(b, d, t, v, d1, d2, d3))\r
                return intQ2A2<FY1Y2_par>(b, d, t, v, d1, d2, d3);\r
@@ -534,16 +547,35 @@ double cParO3(double b, double d, double t, double v, double d1, double d2,
        return intA4<F_par>(b, d, t, v, d1, d2, d3);\r
 }\r
 \r
+double cOrtO3(double b, double d, double t, double v, double d1, double d2,\r
+               double d3, double* zeta) {\r
+       double tmp = 0, dis2 = 0;\r
+\r
+       //kurze Seite nach vorn\r
+       switch_site_ort(b, d, t, v, d1, d2, d3);\r
+\r
+       //kurze Achse nach vorn\r
+//     switch_dim_par(b, d, t, v, d1, d2);\r
+\r
+       if (zeta[1] * zeta[1] * (b * b + d * d) < dist2_ort(b, d, t, v, d1, d2, d3))\r
+               return intQ2A2<FY2Y3_ort>(b, d, t, v, d1, d2, d3);\r
+\r
+       if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b, d, t, v, d1, d2, d3))\r
+               return intQ4<f_ort>(b, d, t, v, d1, d2, d3);\r
+\r
+       return intA4<F_ort>(b, d, t, v, d1, d2, d3);\r
+}\r
+\r
 double cParO4(double b, double d, double t, double v, double d1, double d2,\r
                double d3, double* zeta) {\r
 \r
        double tmp = 0;\r
 \r
        //kurze Seite nach vorn\r
-       switch_site(b, d, t, v, d1, d2);\r
+       switch_site_par(b, d, t, v, d1, d2);\r
 \r
        //kurze Achse nach vorn\r
-       switch_dim(b, d, t, v, d1, d2);\r
+       switch_dim_par(b, d, t, v, d1, d2);\r
 \r
        if ((t * t + v * v) < zeta[0] * dist2_par(b, d, t, v, d1, d2, d3))\r
                return intQ4<f_par>(b, d, t, v, d1, d2, d3);\r
index 0de7e9184f60cf725b87274485b801313f5492f0..81ff7c14841bdb8fb21223a99ca85c9408bee511 100644 (file)
@@ -60,6 +60,7 @@ double cParO2(double, double, double, double, double, double, double, double*);
 double cOrtO2(double, double, double, double, double, double, double, double*);
 //A oder Q oder Qy1x2
 double cParO3(double, double, double, double, double, double, double, double*);
+double cOrtO3(double, double, double, double, double, double, double, double*);
 // A oder Q oder Qx1x2
 double cParO4(double, double, double, double, double, double, double, double*);