]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] Seiten tauschen ausgelagert
authorPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 2 Aug 2012 14:13:04 +0000 (16:13 +0200)
committerPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 2 Aug 2012 14:13:04 +0000 (16:13 +0200)
[src] Achsen tauschen ausgelagert
[src] abstand richtig berechnen
[src] alte automatische Funktionen aus dem Header entfernt

src/slpRectangle.cpp
src/slpRectangle.hpp

index b9e5aaf9475c03e66561374204d790a10a2f6c6f..421052fd074bdcee26bcc9dee5ac6201d4094af9 100644 (file)
@@ -34,6 +34,70 @@ double inline min(double x, double y) {
        return x > y ? y : x;\r
 }\r
 \r
+void inline switch_site(double& b, double& d, double& t, double& v, double& d1,\r
+               double& d2) {\r
+       double tmp = 0;\r
+\r
+       // kleine Seite nach vorn (x1 y1)\r
+       if (b > t) {\r
+               tmp = b;\r
+               b = t;\r
+               t = tmp;\r
+               d1 = -d1;\r
+       }\r
+\r
+       // kleine Seite nach vorn (x2 y2)\r
+       if (d > v) {\r
+               tmp = d;\r
+               d = v;\r
+               v = tmp;\r
+               d2 = -d2;\r
+       }\r
+}\r
+\r
+void inline switch_dim(double& b, double& d, double& t, double& v, double& d1,\r
+               double& d2) {\r
+       if (b * b + t * t > d * d + v * v) {\r
+               double tmp = 0;\r
+\r
+               tmp = b;\r
+               b = d;\r
+               d = tmp;\r
+               tmp = t;\r
+               t = v;\r
+               v = tmp;\r
+\r
+               tmp = d1;\r
+               d1 = d2;\r
+               d2 = tmp;\r
+       }\r
+}\r
+\r
+double inline dist2(double b, double d, double t, double v, double d1, double d2,\r
+               double d3) {\r
+       double dis1= 0,dis2 = 0;\r
+       if (d1 < 0)\r
+               dis1 = -d1 - t;\r
+       else\r
+               dis1 = d1 - b;\r
+       if (dis1 < 0)\r
+               dis1 = 0;\r
+\r
+       if (d2 < 0)\r
+               dis2 = -d2 - v;\r
+       else\r
+               dis2 = d2 - d;\r
+       if (dis2 < 0)\r
+               dis2 = 0;\r
+\r
+       return dis1*dis1+dis2*dis2+d3*d3;\r
+}\r
+\r
+double inline dist(double b, double d, double t, double v, double d1, double d2,\r
+               double d3) {\r
+       return sqrt(dist2(b, d, t, v, d1, d2, d3));\r
+}\r
+\r
 double inline f_A(double x1, double x2, double y1, double y2, double l) {\r
        return 1. / sqrt((x1 - y1) * (x1 - y1) + (x2 - y2) * (x2 - y2) + l * l);\r
 }\r
@@ -587,23 +651,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2,
                double d3, double* zeta) {\r
        double tmp = 0;\r
 \r
-       // kleine Seite nach vorn\r
-       if (b > t) {\r
-               tmp = b;\r
-               b = t;\r
-               t = tmp;\r
-               d1 = -d1;\r
-       }\r
-\r
-       // kleine Seite nach vorn\r
-       if (d > v) {\r
-               tmp = d;\r
-               d = v;\r
-               v = tmp;\r
-               d2 = -d2;\r
-       }\r
+       //kurze Seite nach vorn\r
+       switch_site(b, d, t, v, d1, d2);\r
 \r
-       if ((t * t + v * v) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) {\r
+       if ((t * t + v * v) < zeta[0] * dist2(b, d, t, v, d1, d2, d3)) {\r
                return calcParIntQ(b, d, t, v, d1, d2, d3);\r
        } else {\r
                return calcParIntA(b, d, t, v, d1, d2, d3);\r
@@ -615,25 +666,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2,
 double cParO3(double b, double d, double t, double v, double d1, double d2,\r
                double d3, double* zeta) {\r
 \r
-       double tmp = 0;\r
-\r
-       // kleine Seite nach vorn (x1 y1)\r
-       if (b > t) {\r
-               tmp = b;\r
-               b = t;\r
-               t = tmp;\r
-               d1 = -d1;\r
-       }\r
+       //kurze Seite nach vorn\r
+       switch_site(b, d, t, v, d1, d2);\r
 \r
-       // kleine Seite nach vorn (x2 y2)\r
-       if (d > v) {\r
-               tmp = d;\r
-               d = v;\r
-               v = tmp;\r
-               d2 = -d2;\r
-       }\r
-\r
-       if ((b * b + d * d) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) {\r
+       if ((b * b + d * d) < zeta[0] * dist2(b, d, t, v, d1, d2, d3)) {\r
 //             cout << "E";\r
                return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
        } else {\r
@@ -647,26 +683,14 @@ double cParO4(double b, double d, double t, double v, double d1, double d2,
                double d3, double* zeta) {\r
 \r
        double tmp = 0;\r
+       double dist = dist2(b, d, t, v, d1, d2, d3);\r
 \r
-       // kleine Seite nach vorn\r
-       if (b > t) {\r
-               tmp = b;\r
-               b = t;\r
-               t = tmp;\r
-               d1 = -d1;\r
-       }\r
-\r
-       // kleine Seite nach vorn\r
-       if (d > v) {\r
-               tmp = d;\r
-               d = v;\r
-               v = tmp;\r
-               d2 = -d2;\r
-       }\r
+       //kurze Seite nach vorn\r
+       switch_site(b, d, t, v, d1, d2);\r
 \r
-       if ((t * t + v * v) < zeta[1] * (d1 * d1 + d2 * d2 + d3 * d3)) {\r
+       if ((t * t + v * v) < zeta[1] * dist) {\r
 \r
-               if ((b * b + d * d) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) {\r
+               if ((b * b + d * d) < zeta[0] * dist) {\r
                        return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
                } else {\r
                        return calcParIntA(b, d, t, v, d1, d2, d3);\r
index d7992d4d5165021ac45a2fc08e787263f2c682a2..3dd7a1a8f7ca3d0334560b40d5182d2eda8a85ad 100644 (file)
@@ -3,89 +3,51 @@
 
 //namespace slpR {
 
-       // sol = g0(p,y,x,l);
+// sol = g0(p,y,x,l);
 //     double g_AY(double, double, double, double);
-       // sol = g0(p,y,x,l);
+// sol = g0(p,y,x,l);
 //     double g_QY(double, double, double, double);
 
-       // sol = G00(p,y1,y2,x1,x2,l);
+// sol = G00(p,y1,y2,x1,x2,l);
 //     double G_AY1Y2(double, double, double, double, double, double);
-       // sol = G00(p,y1,y2,x1,x2,l);
+// sol = G00(p,y1,y2,x1,x2,l);
 //     double G_AY2X2(double, double, double, double, double);
-       // sol = G00(p,y1,y2,x1,x2,l);
+// sol = G00(p,y1,y2,x1,x2,l);
 //     double G_QY1Y2(double, double, double, double, double, double);
 //     double Gs_AX2Y1Y2(double, double, double, double, double, double);
 
-       // sol = F_par(x1,x2,y1,y2,d1,d2,d3);
+// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
 //     double F_par(double, double, double, double, double, double, double);
-       // sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
+// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
 //     double F_ort(double, double, double, double, double, double, double);
 
-       // sol = quad0Int4((F_par/F_ort),b,d,t,v,d1,d2,d3);
+// sol = quad0Int4((F_par/F_ort),b,d,t,v,d1,d2,d3);
 //     double apply0Int4(
 //double(*)(double, double, double, double, double, double, double),
-       //double, double, double, double, double, double, double);
-                       //      double apply0Int2(
-                       //double(*)(double, double, double, double, double, double, double),
-                       //double, double, double, double, double, double, double);
-
-       // sol = calcParInt.(b,d,t,v,d1,d2,d3);
-       double calcParIntA(double, double, double, double, double, double, double);
-       double calcParIntQX1X2(double, double, double, double, double, double, double);
-       double calcParIntQY1X1(double, double, double, double, double, double, double);
-       double calcParIntQY1(double, double, double, double, double, double, double);
-       double calcParIntQ(double, double, double, double, double, double, double);
-
-       // sol = calcOrtInt.(b,d,t,v,d1,d2,d3);
-       double calcOrtIntA(double, double, double, double, double, double, double);
-       double calcOrtIntQX1X2(double, double, double, double, double, double, double);
-
-
-
-       //Voll Analytische Berechnung
-       double calcParIntO0(double, double, double, double, double, double, double,
-                       double);
-       double calcOrtIntO0(double, double, double, double, double, double, double,
-                       double);
-
-       // Elemente Vertauschen
-       // sol = calc...Int01(b,d,t,v,d1,d2,d3);
-       double calcParIntO1(double, double, double, double, double, double, double,
-                       double);
-       double calcOrtIntO1(double, double, double, double, double, double, double,
-                       double);
-
-       // Quadratur ueber kleineres Element
-       // sol = calc...Int02(b,d,t,v,d1,d2,d3,eta);
-       double calcParIntO2(double, double, double, double, double, double, double,
-                       double);
-       double calcOrtIntO2(double, double, double, double, double, double, double,
-                       double);
-
-       // Quadratur kuerzere Achse/Seite
-       // sol = calc...Int03(b,d,t,v,d1,d2,d3,eta);
-       double calcParIntO3(double, double, double, double, double, double, double,
-                       double);
-       double calcOrtIntO3(double, double, double, double, double, double, double,
-                       double);
-
-
-       //Automatische entscheidung, welche Quad verwendet werden soll
-       // sol = cParIntX(b,d,t,v,d1,d2,d3,eta);
-
-       //Voll Analytisch
-       double cParO1(double, double, double, double, double, double, double,
-                       double*);
-       //A oder Q
-       double cParO2(double, double, double, double, double, double, double,
-                       double*);
-       //A oder Qx1x2
-       double cParO3(double, double, double, double, double, double, double,
-                       double*);
-       // A oder Q oder Qx1x2
-       double cParO4(double, double, double, double, double, double, double,
-                       double*);
-
+//double, double, double, double, double, double, double);
+//     double apply0Int2(
+//double(*)(double, double, double, double, double, double, double),
+//double, double, double, double, double, double, double);
+
+// sol = calcParInt.(b,d,t,v,d1,d2,d3);
+double calcParIntA(double, double, double, double, double, double, double);
+double calcParIntQX1X2(double, double, double, double, double, double, double);
+double calcParIntQY1X1(double, double, double, double, double, double, double);
+double calcParIntQY1(double, double, double, double, double, double, double);
+double calcParIntQ(double, double, double, double, double, double, double);
+
+// sol = calcOrtInt.(b,d,t,v,d1,d2,d3);
+double calcOrtIntA(double, double, double, double, double, double, double);
+double calcOrtIntQX1X2(double, double, double, double, double, double, double);
+
+//Voll Analytisch
+double cParO1(double, double, double, double, double, double, double, double*);
+//A oder Q
+double cParO2(double, double, double, double, double, double, double, double*);
+//A oder Qx1x2
+double cParO3(double, double, double, double, double, double, double, double*);
+// A oder Q oder Qx1x2
+double cParO4(double, double, double, double, double, double, double, double*);
 
 //}
 #endif