Salome HOME
projects
/
tools
/
medcoupling.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Attempt of Management of profiles in spliter
[tools/medcoupling.git]
/
src
/
INTERP_KERNEL
/
TetraAffineTransform.cxx
diff --git
a/src/INTERP_KERNEL/TetraAffineTransform.cxx
b/src/INTERP_KERNEL/TetraAffineTransform.cxx
index 5c8ac1b6e19cc20d74ddc9f9c031f33d0e8247f6..3952c4ba0c7f0a63a4888ea6fb62d38507288ea7 100644
(file)
--- a/
src/INTERP_KERNEL/TetraAffineTransform.cxx
+++ b/
src/INTERP_KERNEL/TetraAffineTransform.cxx
@@
-1,9
+1,9
@@
-// Copyright (C) 2007-201
2
CEA/DEN, EDF R&D
+// Copyright (C) 2007-201
9
CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License
, or (at your option) any later version
.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-38,13
+38,12
@@
namespace INTERP_KERNEL
* with corners specified in pts. If the tetrahedron is degenerate or almost degenerate,
* construction succeeds, but the determinant of the transform is set to 0.
*
* with corners specified in pts. If the tetrahedron is degenerate or almost degenerate,
* construction succeeds, but the determinant of the transform is set to 0.
*
- * @param pts a 4x3 matrix containing 4 points (
pts[0], ..., pts[3]
) of 3 coordinates each
+ * @param pts a 4x3 matrix containing 4 points (
P0X,P0Y,P0Z,P1X,P1Y,P1Z,...
) of 3 coordinates each
*/
*/
- TetraAffineTransform::TetraAffineTransform(const double
**
pts)
+ TetraAffineTransform::TetraAffineTransform(const double
*
pts)
{
LOG(2,"Creating transform from tetraeder : ");
{
LOG(2,"Creating transform from tetraeder : ");
- LOG(2, vToStr(pts[0]) << ", " << vToStr(pts[1]) << ", " << vToStr(pts[2]) << ", " << vToStr(pts[3]));
// three last points -> linear transform
for(int i = 0; i < 3 ; ++i)
// three last points -> linear transform
for(int i = 0; i < 3 ; ++i)
@@
-52,21
+51,25
@@
namespace INTERP_KERNEL
for(int j = 0 ; j < 3 ; ++j)
{
// NB we insert columns, not rows
for(int j = 0 ; j < 3 ; ++j)
{
// NB we insert columns, not rows
- _linear_transform[3*j + i] =
(pts[i+1])[j] - (pts[0])
[j];
+ _linear_transform[3*j + i] =
pts[(i+1)*3+j] - pts
[j];
}
}
// remember _linear_transform for the reverse transformation
memcpy( _back_linear_transform, _linear_transform, 9*sizeof(double));
}
}
// remember _linear_transform for the reverse transformation
memcpy( _back_linear_transform, _linear_transform, 9*sizeof(double));
- memcpy( _back_translation, pts
[0]
, 3*sizeof(double));
+ memcpy( _back_translation, pts, 3*sizeof(double));
calculateDeterminant();
LOG(3, "determinant before inverse = " << _determinant);
calculateDeterminant();
LOG(3, "determinant before inverse = " << _determinant);
+
+ double ni(1./INTERP_KERNEL::normInf(_linear_transform));
+ ni = ni*ni*ni;
// check that tetra is non-planar -> determinant is not zero
// check that tetra is non-planar -> determinant is not zero
+ // AGY : the check to 0. must integrate the infinite norm of _linear_transform matrix.
// otherwise set _determinant to zero to signal caller that transformation did not work
// otherwise set _determinant to zero to signal caller that transformation did not work
- if(epsilonEqual(_determinant, 0.0))
+ if(epsilonEqual(
ni*
_determinant, 0.0))
{
_determinant = 0.0;
return;
{
_determinant = 0.0;
return;
@@
-81,7
+84,7
@@
namespace INTERP_KERNEL
// and O is the position vector of the point that is mapped onto the origin
for(int i = 0 ; i < 3 ; ++i)
{
// and O is the position vector of the point that is mapped onto the origin
for(int i = 0 ; i < 3 ; ++i)
{
- _translation[i] = -(_linear_transform[3*i]*
(pts[0])[0] + _linear_transform[3*i+1]*(pts[0])[1] + _linear_transform[3*i+2]*(pts[0])
[2]) ;
+ _translation[i] = -(_linear_transform[3*i]*
pts[0] + _linear_transform[3*i+1]*pts[1] + _linear_transform[3*i+2]*pts
[2]) ;
}
// precalculate determinant (again after inversion of transform)
}
// precalculate determinant (again after inversion of transform)
@@
-95,7
+98,7
@@
namespace INTERP_KERNEL
for(int i = 0; i < 4 ; ++i)
{
double v[3];
for(int i = 0; i < 4 ; ++i)
{
double v[3];
- apply(v, pts
[i]
);
+ apply(v, pts
+3*i
);
LOG(4, vToStr(v))
for(int j = 0; j < 3; ++j)
{
LOG(4, vToStr(v))
for(int j = 0; j < 3; ++j)
{
@@
-253,9
+256,9
@@
namespace INTERP_KERNEL
// form standard base vector i
const double b[3] =
{
// form standard base vector i
const double b[3] =
{
-
int(i == 0
),
-
int(i == 1
),
- int(i == 2)
+
double ( int(i == 0)
),
+
double ( int(i == 1)
),
+ double ( int(i == 2) ),
};
LOG(6, "b = [" << b[0] << ", " << b[1] << ", " << b[2] << "]");
};
LOG(6, "b = [" << b[0] << ", " << b[1] << ", " << b[2] << "]");