From 513a3f6eaca0b6b917d8cec4702ab8b174795620 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Thu, 2 Aug 2012 16:13:04 +0200 Subject: [PATCH] [src] Seiten tauschen ausgelagert [src] Achsen tauschen ausgelagert [src] abstand richtig berechnen [src] alte automatische Funktionen aus dem Header entfernt --- src/slpRectangle.cpp | 126 +++++++++++++++++++++++++------------------ src/slpRectangle.hpp | 102 +++++++++++------------------------ 2 files changed, 107 insertions(+), 121 deletions(-) diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index b9e5aaf..421052f 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -34,6 +34,70 @@ double inline min(double x, double y) { return x > y ? y : x; } +void inline switch_site(double& b, double& d, double& t, double& v, double& d1, + double& d2) { + double tmp = 0; + + // kleine Seite nach vorn (x1 y1) + if (b > t) { + tmp = b; + b = t; + t = tmp; + d1 = -d1; + } + + // kleine Seite nach vorn (x2 y2) + if (d > v) { + tmp = d; + d = v; + v = tmp; + d2 = -d2; + } +} + +void inline switch_dim(double& b, double& d, double& t, double& v, double& d1, + double& d2) { + if (b * b + t * t > d * d + v * v) { + double tmp = 0; + + tmp = b; + b = d; + d = tmp; + tmp = t; + t = v; + v = tmp; + + tmp = d1; + d1 = d2; + d2 = tmp; + } +} + +double inline dist2(double b, double d, double t, double v, double d1, double d2, + double d3) { + double dis1= 0,dis2 = 0; + if (d1 < 0) + dis1 = -d1 - t; + else + dis1 = d1 - b; + if (dis1 < 0) + dis1 = 0; + + if (d2 < 0) + dis2 = -d2 - v; + else + dis2 = d2 - d; + if (dis2 < 0) + dis2 = 0; + + return dis1*dis1+dis2*dis2+d3*d3; +} + +double inline dist(double b, double d, double t, double v, double d1, double d2, + double d3) { + return sqrt(dist2(b, d, t, v, d1, d2, d3)); +} + double inline f_A(double x1, double x2, double y1, double y2, double l) { return 1. / sqrt((x1 - y1) * (x1 - y1) + (x2 - y2) * (x2 - y2) + l * l); } @@ -587,23 +651,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2, double d3, double* zeta) { double tmp = 0; - // kleine Seite nach vorn - if (b > t) { - tmp = b; - b = t; - t = tmp; - d1 = -d1; - } - - // kleine Seite nach vorn - if (d > v) { - tmp = d; - d = v; - v = tmp; - d2 = -d2; - } + //kurze Seite nach vorn + switch_site(b, d, t, v, d1, d2); - if ((t * t + v * v) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) { + if ((t * t + v * v) < zeta[0] * dist2(b, d, t, v, d1, d2, d3)) { return calcParIntQ(b, d, t, v, d1, d2, d3); } else { return calcParIntA(b, d, t, v, d1, d2, d3); @@ -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, double d3, double* zeta) { - double tmp = 0; - - // kleine Seite nach vorn (x1 y1) - if (b > t) { - tmp = b; - b = t; - t = tmp; - d1 = -d1; - } + //kurze Seite nach vorn + switch_site(b, d, t, v, d1, d2); - // kleine Seite nach vorn (x2 y2) - if (d > v) { - tmp = d; - d = v; - v = tmp; - d2 = -d2; - } - - if ((b * b + d * d) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) { + if ((b * b + d * d) < zeta[0] * dist2(b, d, t, v, d1, d2, d3)) { // cout << "E"; return calcParIntQX1X2(b, d, t, v, d1, d2, d3); } else { @@ -647,26 +683,14 @@ double cParO4(double b, double d, double t, double v, double d1, double d2, double d3, double* zeta) { double tmp = 0; + double dist = dist2(b, d, t, v, d1, d2, d3); - // kleine Seite nach vorn - if (b > t) { - tmp = b; - b = t; - t = tmp; - d1 = -d1; - } - - // kleine Seite nach vorn - if (d > v) { - tmp = d; - d = v; - v = tmp; - d2 = -d2; - } + //kurze Seite nach vorn + switch_site(b, d, t, v, d1, d2); - if ((t * t + v * v) < zeta[1] * (d1 * d1 + d2 * d2 + d3 * d3)) { + if ((t * t + v * v) < zeta[1] * dist) { - if ((b * b + d * d) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) { + if ((b * b + d * d) < zeta[0] * dist) { return calcParIntQX1X2(b, d, t, v, d1, d2, d3); } else { return calcParIntA(b, d, t, v, d1, d2, d3); diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index d7992d4..3dd7a1a 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -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 -- 2.47.3