Last change
on this file since 2838 was 2838, checked in by Mathieu Morlighem, 15 years ago |
Added Bamgx/objects/MatVVP2x2.cpp and Bamgx/objects/MetricAnIso.cpp
|
File size:
1.1 KB
|
Line | |
---|
1 | #include <cstdio>
|
---|
2 | #include <cstring>
|
---|
3 | #include <cmath>
|
---|
4 | #include <ctime>
|
---|
5 |
|
---|
6 | #include "../Mesh2.h"
|
---|
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 |
|
---|
14 | namespace bamg {
|
---|
15 |
|
---|
16 | /*Constructor{{{1*/
|
---|
17 | MatVVP2x2::MatVVP2x2(const MetricAnIso M){
|
---|
18 | double a11=M.a11,a21=M.a21,a22=M.a22;
|
---|
19 | const double eps = 1.e-5;
|
---|
20 | double c11 = a11*a11, c22 = a22*a22, c21= a21*a21;
|
---|
21 | double b=-a11-a22,c=-c21+a11*a22;
|
---|
22 | double delta = b*b - 4 * c ;
|
---|
23 | double n2=(c11+c22+c21);
|
---|
24 | if ( n2 < 1e-30)
|
---|
25 | lambda1=lambda2=0,v.x=1,v.y=0;
|
---|
26 | else if (delta < eps*n2)
|
---|
27 | {
|
---|
28 | lambda1=lambda2=-b/2, v.x=1,v.y=0;
|
---|
29 | }
|
---|
30 | else
|
---|
31 | { // --- construction de 2 vecteur dans (Im ( A - D(i) Id) ortogonal
|
---|
32 | delta = sqrt(delta);
|
---|
33 | lambda1 = (-b-delta)/2.0,lambda2 = (-b+delta)/2.0;
|
---|
34 | double v0 = a11-lambda1, v1 = a21,v2 = a22 - lambda1;
|
---|
35 | double s0 = v0*v0 + v1*v1, s1 = v1*v1 +v2*v2;
|
---|
36 |
|
---|
37 | if(s1 < s0)
|
---|
38 | s0=sqrt(s0),v.x=v1/s0,v.y=-v0/s0;
|
---|
39 | else
|
---|
40 | s1=sqrt(s1),v.x=v2/s1,v.y=-v1/s1;
|
---|
41 | };
|
---|
42 | }
|
---|
43 | /*}}}1*/
|
---|
44 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.