From 1b67fb88ccab1181338b327425ee1db97bb239f2 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Thu, 21 Mar 2013 22:54:23 +0100 Subject: [PATCH] [src] mex_build_V kann nun Q und QE auf par und ort rechnen --- src/mex_build_V.cpp | 2 +- src/slpRectangle.cpp | 102 ++++++++++++++++++++++++++++--------------- src/slpRectangle.hpp | 1 + 3 files changed, 69 insertions(+), 36 deletions(-) diff --git a/src/mex_build_V.cpp b/src/mex_build_V.cpp index 8ffde9e..5f6a5c2 100644 --- a/src/mex_build_V.cpp +++ b/src/mex_build_V.cpp @@ -249,7 +249,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { break; case 3: // Analytisch oder Qy[1]x2 ctypeP = cParO3; - ctypeO = cOrtO1; + ctypeO = cOrtO3; break; case 4: // Analytisch oder Qx1x2 ctypeP = cParO4; diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index efdd77b..70c303f 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -51,11 +51,12 @@ double inline max(double x, double y) { double inline min(double x, double y) { return x > y ? y : x; } + /* * kleinere Seiten nach vorn und dadurch kleinerer Durchmesser nach vorn */ -void inline switch_site(double& b, double& d, double& t, double& v, double& d1, - double& d2) { +void inline switch_site_par(double& b, double& d, double& t, double& v, + double& d1, double& d2) { double tmp = 0; // kleine Seite nach vorn (x1 y1) @@ -75,8 +76,34 @@ void inline switch_site(double& b, double& d, double& t, double& v, double& d1, } } -void inline switch_dim(double& b, double& d, double& t, double& v, double& d1, - double& d2) { +/* + * kleinere Seiten nach vorn und dadurch kleinerer Durchmesser nach vorn + */ +void inline switch_site_ort(double& b, double& d, double& t, double& v, + double& d1, double& d2, double& d3) { + double tmp = 0; + + // kleine Seite nach vorn (x2 y2) + if (d > t) { + tmp = d; + d = t; + t = tmp; + d2 = -d2; + } + + // kleine Seite nach vorn (x1 y3) + if (b > v) { + tmp = b; + b = v; + v = tmp; + tmp = -d1; + d1 = -d3; + d3 = tmp; + } +} + +void inline switch_dim_par(double& b, double& d, double& t, double& v, + double& d1, double& d2) { // if (b * b + t * t > d * d + v * v) { double tmp = 0; @@ -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; } - /* * gibt den Abstand in einer Richtung zum Quadrat zurueck */ @@ -163,7 +189,6 @@ double inline dist_s2(double b, double t, double d1) { return dis1 * dis1; } - double inline f_par(double x1, double x2, double y1, double y2, double d1, double d2, double d3) { return 1. @@ -369,12 +394,17 @@ double inline F_ort(double x1, double x2, double y2, double y3, double d1, double inline FY1Y2_par(double x1, double x2, double y1, double y2, double d1, double d2, double d3) { - return G_AY1Y2(-0.5, y1 + d1, y2 + d2, x1, x2, d3); + return G_AY1Y2(-0.5, y1, y2, x1 - d1, x2 - d2, d3); } -double inline FY2X2_par(double y1, double x1, double y2, double x2, double d1, +//double inline FY2X2_par(double y1, double x1, double y2, double x2, double d1, +// double d2, double d3) { +// return G_AY2X2(y1 + d1, y2 + d2, x1, x2, d3); +//} + +double inline FY2Y3_ort(double x1, double x2, double y2, double y3, double d1, double d2, double d3) { - return G_AY2X2(y1 + d1, y2 + d2, x1, x2, d3); + return G_AY1Y2(-0.5, y2 , y3 , x2-d2, -d3, x1-d1); } /* @@ -472,10 +502,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2, double tmp = 0; //kurze Seite nach vorn - switch_site(b, d, t, v, d1, d2); + switch_site_par(b, d, t, v, d1, d2); //kurze Achse nach vorn -// switch_dim(b, d, t, v, d1, d2); +// switch_dim_par(b, d, t, v, d1, d2); if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_par(b, d, t, v, d1, d2, d3)) return intQ4(b, d, t, v, d1, d2, d3); @@ -488,30 +518,13 @@ double cOrtO2(double b, double d, double t, double v, double d1, double d2, double tmp = 0, dis2 = 0; //kurze Seite nach vorn -// switch_site(b, d, t, v, d1, d2); - if (d > t) { - tmp = d; - d = t; - t = tmp; - d2 = -d2; - } - - if (b > v) { - tmp = b; - b = v; - v = tmp; - tmp = -d1; - d1 = -d3; - d3 = tmp; - } + switch_site_ort(b, d, t, v, d1, d2, d3); //kurze Achse nach vorn -// switch_dim(b, d, t, v, d1, d2); +// switch_dim_par(b, d, t, v, d1, d2); - if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b,d,t,v,d1,d2,d3)){ -// mexPrintf("Was used!\n"); + if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b, d, t, v, d1, d2, d3)) return intQ4(b, d, t, v, d1, d2, d3); - } return intA4(b, d, t, v, d1, d2, d3); } @@ -520,10 +533,10 @@ double cParO3(double b, double d, double t, double v, double d1, double d2, double d3, double* zeta) { //kurze Seite nach vorn - switch_site(b, d, t, v, d1, d2); + switch_site_par(b, d, t, v, d1, d2); //kurze Achse nach vorn -// switch_dim(b, d, t, v, d1, d2); +// switch_dim_par(b, d, t, v, d1, d2); if (zeta[1] * zeta[1] * (b * b + d * d) < dist2_par(b, d, t, v, d1, d2, d3)) return intQ2A2(b, d, t, v, d1, d2, d3); @@ -534,16 +547,35 @@ double cParO3(double b, double d, double t, double v, double d1, double d2, return intA4(b, d, t, v, d1, d2, d3); } +double cOrtO3(double b, double d, double t, double v, double d1, double d2, + double d3, double* zeta) { + double tmp = 0, dis2 = 0; + + //kurze Seite nach vorn + switch_site_ort(b, d, t, v, d1, d2, d3); + + //kurze Achse nach vorn +// switch_dim_par(b, d, t, v, d1, d2); + + if (zeta[1] * zeta[1] * (b * b + d * d) < dist2_ort(b, d, t, v, d1, d2, d3)) + return intQ2A2(b, d, t, v, d1, d2, d3); + + if (zeta[0] * zeta[0] * (t * t + v * v) < dist2_ort(b, d, t, v, d1, d2, d3)) + return intQ4(b, d, t, v, d1, d2, d3); + + return intA4(b, d, t, v, d1, d2, d3); +} + double cParO4(double b, double d, double t, double v, double d1, double d2, double d3, double* zeta) { double tmp = 0; //kurze Seite nach vorn - switch_site(b, d, t, v, d1, d2); + switch_site_par(b, d, t, v, d1, d2); //kurze Achse nach vorn - switch_dim(b, d, t, v, d1, d2); + switch_dim_par(b, d, t, v, d1, d2); if ((t * t + v * v) < zeta[0] * dist2_par(b, d, t, v, d1, d2, d3)) return intQ4(b, d, t, v, d1, d2, d3); diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index 0de7e91..81ff7c1 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -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*); -- 2.47.3