[2838] | 1 | #include <cstdio>
|
---|
| 2 | #include <cstring>
|
---|
| 3 | #include <cmath>
|
---|
| 4 | #include <ctime>
|
---|
| 5 |
|
---|
[2864] | 6 | #include "../Bamgx.h"
|
---|
[2838] | 7 | #include "../QuadTree.h"
|
---|
| 8 | #include "../SetOfE4.h"
|
---|
| 9 |
|
---|
| 10 | #include "../../shared/shared.h"
|
---|
| 11 | #include "../../include/macros.h"
|
---|
| 12 | #include "../../toolkits/toolkits.h"
|
---|
| 13 |
|
---|
[2850] | 14 | #undef __FUNCT__
|
---|
| 15 | #define __FUNCT__ "MatVVP2x2"
|
---|
| 16 |
|
---|
[2838] | 17 | namespace bamg {
|
---|
| 18 |
|
---|
[2841] | 19 | /*Constructor*/
|
---|
| 20 | /*FUNCTION MatVVP2x2::MatVVP2x2(const MetricAnIso M){{{1*/
|
---|
[2838] | 21 | MatVVP2x2::MatVVP2x2(const MetricAnIso M){
|
---|
| 22 | double a11=M.a11,a21=M.a21,a22=M.a22;
|
---|
| 23 | const double eps = 1.e-5;
|
---|
| 24 | double c11 = a11*a11, c22 = a22*a22, c21= a21*a21;
|
---|
| 25 | double b=-a11-a22,c=-c21+a11*a22;
|
---|
| 26 | double delta = b*b - 4 * c ;
|
---|
| 27 | double n2=(c11+c22+c21);
|
---|
| 28 | if ( n2 < 1e-30)
|
---|
| 29 | lambda1=lambda2=0,v.x=1,v.y=0;
|
---|
| 30 | else if (delta < eps*n2)
|
---|
| 31 | {
|
---|
| 32 | lambda1=lambda2=-b/2, v.x=1,v.y=0;
|
---|
| 33 | }
|
---|
| 34 | else
|
---|
| 35 | { // --- construction de 2 vecteur dans (Im ( A - D(i) Id) ortogonal
|
---|
| 36 | delta = sqrt(delta);
|
---|
| 37 | lambda1 = (-b-delta)/2.0,lambda2 = (-b+delta)/2.0;
|
---|
| 38 | double v0 = a11-lambda1, v1 = a21,v2 = a22 - lambda1;
|
---|
| 39 | double s0 = v0*v0 + v1*v1, s1 = v1*v1 +v2*v2;
|
---|
| 40 |
|
---|
| 41 | if(s1 < s0)
|
---|
| 42 | s0=sqrt(s0),v.x=v1/s0,v.y=-v0/s0;
|
---|
| 43 | else
|
---|
| 44 | s1=sqrt(s1),v.x=v2/s1,v.y=-v1/s1;
|
---|
| 45 | };
|
---|
| 46 | }
|
---|
| 47 | /*}}}1*/
|
---|
[2841] | 48 |
|
---|
[2838] | 49 | }
|
---|