[Insight-users] itkDeformableMesh3DFilter : the violation access
Julien Mercenier
itk_julienmercenier at hotmail.com
Fri, 12 Mar 2004 19:19:39 +0100
This is a multi-part message in MIME format.
------=_NextPart_000_002E_01C40866.F70F06A0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_002F_01C40866.F70F06A0"
------=_NextPart_001_002F_01C40866.F70F06A0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi Luis,
this e-mail will be quite long....
I haven't yet tried the exemple2 (registarion model2) you created =
with
my example because I must format my PC... =20
(1) First, I found how, when using the itkDeformableMesh3DFilter =
with my own initialization, not to have a crash.
When initializing my own triangle mesh, I must associate (here by giving =
it a value) a=20
data to each triangle cell.
I found this because this was the main difference between my =
initializing and a meshSource (binary or sphere).
I put an simple example in attachment :
This is a tetraedra composed of triangle cells.
The image (100*100*100) is a sphere (I've tried with =
a radius of 40.0) created by the user-guide
example. Sorry, I don't push the shere.img in =
attachment (otherwise the e-mail will be refused).
But, even this example doesn't work well :=20
(a) variating the stiffness doesn't seem to variate =
the results (the nodes' displacements)
(b) if I increase the cell data, the displacements =
seem to decrease.
=
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!! I've tried with a data cell value =
=3D 100 and the program crashed =
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!! with the same access violation than =
before =
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Is this the consequence of =
itkDeformableMesh3DFilter.txx/line 279 ?
while (celldata !=3D myCellData->End()){
x =3D celldata.Value();
m_K[j] =3D m_StiffnessMatrix+((int) x);
while casting the double to an int =
???????????????????
(c) when I increase the force scale (that must be =
big to obtain a deformation) or the time step,
the deformations seem to increase
(d) the step number doesn' t seem to influence the =
results=20
(e) the step threshold have effects
Although these, the results are bad !... : )
I didn't manage to find good parameters to this example.
(2) Can you tell me on which article you based your work to =
construct this filter...?
This could be very helpful to me to understand the stiffnessmatrix =
computing and maybe other things in the code.
I must understand this one or create another one (this is a part of my =
"ingeneering thesis"...I don't know if this is called like that=20
in English).
(3) Now, I have questions and remarks about the source code =
itself...(itkDeformableMesh3DFilter.txx)
(a) itkDeformableMesh3DFilter.txx/line 702
InputPointDataContainerPointer myForceData =3D =
m_Forces->GetPointData(); =20
where is defined (in the documentation) the function GetPointData ? =
I didn't find it in the itk::mesh class.
(b) where is called the function=20
DeformableMesh3DFilter<TInputMesh, TOutputMesh>
::SetStiffnessMatrix ( vnl_matrix_fixed<double, 4, 4> =
*stiff, int i )=20
defined at itkDeformableMesh3DFilter.txx/line =
238 ??
(c) I don't understand this command
x =3D celldata.Value();
m_K[j] =3D m_StiffnessMatrix+((int) x);
defined at itkDeformableMesh3DFilter.txx/line =
280
and why do you use data associated with cell ?
(d) itkDeformableMesh3DFilter.txx/line 319
m_Displacements->GetPoint (tp[0], v1_pt);=20
m_Displacements->GetPoint (tp[1], v2_pt);=20
m_Displacements->GetPoint (tp[2], v3_pt);
where is defined the function GetPoint (same reason as in (a)) ???
(e) itkDeformableMesh3DFilter.txx/line 489
output->SetCellData(i, (PixelType)x);
why do you modify the cell data at the output ?=20
(f) itkDeformableMesh3DFilter.txx/line 551
coord[0] =3D (int) vec_p[0];
coord[1] =3D (int) vec_p[1];
coord[2] =3D (int) vec_p[2];
are you sure there is no problem if the vec_p[0] type is double ???
(g) itkDeformableMesh3DFilter.txx/line 555
if ( m_Potential->GetPixel(coord) !=3D m_ObjectLabel )
what is m_ObjectLabel ?=20
(h)itkDeformableMesh3DFilter.txx/line 521
template <typename TInputMesh, typename TOutputMesh>
void
DeformableMesh3DFilter<TInputMesh, TOutputMesh>
::PotentialFit()=20
what is the use of this function ? I don't see it is called anywhere.=20
(i) itkDeformableMesh3DFilter.txx/line 819
coa =3D -(v1[1]*(v2[2]-v3[2]) +=20
v2[1]*(v3[2]-v1[2]) +
v3[1]*(v1[2]-v2[2])) ;
cob =3D -(v1[2] * (v2[0]-v3[0]) +
v2[2]*(v3[0]-v1[0]) +
v3[2]*(v1[0]-v2[0])) ;
coc =3D -(v1[0] * (v2[1]-v3[1]) +
v2[0]*(v3[1]-v1[1]) +
v3[0]*(v1[1]-v2[1])) ;
I don't understand these steps in the normals computing. What is it =
based on ?
(j) itkDeformableMesh3DFilter.txx/line 783
Remark : in this function, you compute several times the normal at one =
point.
The value of the normal saved is the last one computed. The other =
computings are lost.
Is it right ?
So the normal at one node seems to be the consequence of only one cell =
(triangle)....
(k) itkDeformableMesh3DFilter.txx/line 749
vec_for[0] =3D vec_for[0] + (vec_loc[0]-coord[0])*tmp_vec_1[0]=20
+ (vec_loc[1]-coord[1])*tmp_vec_2[0] + =
(vec_loc[2]-coord[2])*tmp_vec_3[0];
vec_for[1] =3D vec_for[1] + (vec_loc[1]-coord[1])*tmp_vec_2[1]
+ (vec_loc[0]-coord[0])*tmp_vec_1[1] + =
(vec_loc[2]-coord[2])*tmp_vec_3[1];
vec_for[2] =3D vec_for[2] + (vec_loc[2]-coord[2])*tmp_vec_3[2]
+ (vec_loc[1]-coord[1])*tmp_vec_2[2] + =
(vec_loc[0]-coord[0])*tmp_vec_1[2];
remark : here, in the GradientFit function, using generalized Taylor =
theorem, I think you=20
assumed the spacing to be equal to 1 in each direction.
The voxel spacing can although be strongly different.
(l) The last but not least.
itkDeformableMesh3DFilter.txx/line 761
mag =3D vec_for[0]*vec_nor[0] + vec_for[1]*vec_nor[1]+ =
vec_for[2]*vec_nor[2];
vec_for[0] =3D m_GradientMagnitude*mag*vec_nor[0]/*num_for*/;
vec_for[1] =3D m_GradientMagnitude*mag*vec_nor[1]/*num_for*/;=20
vec_for[2] =3D m_GradientMagnitude*mag*vec_nor[2]/*num_for*/;=20
mag =3D sqrt (vec_for[0]*vec_for[0] + vec_for[1]*vec_for[1]+ =
vec_for[2]*vec_for[2]);
if (mag > 0.5)=20
for (int i=3D0; i<3; i++) vec_for[i] =3D (0.5 * vec_for[i])/mag;
forces.Value() =3D vec_for;
You compute the force vector on one point by projection of the =
gradient vector fitted=20
on the normal vector of this point.
So, the force direction is defined by the normal and not by the gradient =
field.
Am I right ?
So, considering I'm right, using GVF field in place of the simple =
gradient field
would not conclude to better results using this =
itkDeformableMesh3DFilter...
This GVF filed would although be so helpful to recover concave =
regions....
What do you think ?
=20
I hope you will not be angry against me for writing such a long email, =
but this is
very important for my thesis...
Thanks in advance,
Julien,BELGIUM
------=_NextPart_001_002F_01C40866.F70F06A0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Hi Luis,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> this e-mail will be =
quite=20
long....</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> I haven't yet tried =
the exemple2=20
(registarion model2) you created with</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> my example =
because I=20
must format my PC... </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> (1)=20
<STRONG> First</STRONG>, I found how, when using the=20
itkDeformableMesh3DFilter with my own initialization, not to have a=20
crash.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>When initializing my own triangle mesh, =
I must=20
associate (here by giving it a value) a </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>data to each triangle =
cell.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I found this because this was the main =
difference=20
between my initializing and a meshSource (binary or =
sphere).</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I put an simple example in attachment=20
:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
This is a =
tetraedra=20
composed of triangle cells.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
The image =
(100*100*100)=20
is a sphere (I've tried with a radius of 40.0) created by the=20
user-guide</FONT></DIV>
<DIV><FONT face=3DArial=20
size=3D2> &nbs=
p; example.=20
Sorry, I don't push the shere.img in attachment (otherwise the e-mail =
will be=20
refused).</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>But, even this example doesn't work =
well :=20
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
(a) variating =
the=20
stiffness doesn't seem to variate the results (the nodes'=20
displacements)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
(b) if I =
increase the=20
cell data, the displacements seem to decrease.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
=20
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
=20
!!!!!!!!!!! I've tried with a data cell value =3D 100 and the program =
crashed=20
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
=20
!!!!!!!!!!! with the same access violation than before =
=
=20
=20
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
Is=20
this the consequence of <STRONG>itkDeformableMesh3DFilter.txx/line=20
279</STRONG> ?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
<EM>=20
</EM></FONT><EM> </EM><FONT face=3DArial size=3D2><EM> while =
(celldata !=3D=20
myCellData->End()){<BR>  =
; =
x=20
=3D=20
celldata.Value();<BR> &nbs=
p;  =
; =20
m_K[j] =3D m_StiffnessMatrix+((int) x);</EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
while casting =
the=20
double to an int ???????????????????</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
(c) when I =
increase the=20
force scale (that must be big to obtain a deformation) or the time=20
step,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
the=20
deformations seem to increase</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
(d) the step =
number=20
doesn' t seem to influence the results </FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
(e) the step =
threshold=20
have effects</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Although these, the results are bad =
!... :=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I didn't manage to find good parameters =
to this=20
example.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> (2) Can you tell =
me on=20
which article you based your work to construct this =
filter...?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>This could be very helpful to me to =
understand the=20
stiffnessmatrix computing and maybe other things in the =
code.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I must understand this one or =
create another=20
one (this is a part of my "ingeneering thesis"...I don't know if this is =
called=20
like that </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>in English).</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> (3) Now, I have =
questions and=20
remarks about the source code=20
itself...(itkDeformableMesh3DFilter.txx)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(a)=20
<STRONG>itkDeformableMesh3DFilter.txx/line 702</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
<EM>InputPointDataContainerPointer myForceData =3D=20
m_Forces->GetPointData();</EM></FONT><FONT face=3DArial=20
size=3D2> </FONT></DIV>
<DIV><FONT face=3DArial size=3D2> where is defined (in =
the=20
documentation) the function <EM>GetPointData ?</EM> I didn't find it in =
the=20
itk::mesh class.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(b) where is =
called the=20
function </FONT></DIV>
<DIV><FONT face=3DArial =
size=3D2><EM>DeformableMesh3DFilter<TInputMesh,=20
TOutputMesh><BR> =
=20
::SetStiffnessMatrix ( vnl_matrix_fixed<double, 4, =
4>=20
*stiff, int i ) </EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2> =20
=
=20
defined at <STRONG>itkDeformableMesh3DFilter.txx/line=20
238 &nbs=
p;=20
</STRONG>??</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(c) I don't =
understand=20
this command</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><EM> x =3D =
celldata.Value();<BR> m_K[j] =3D=20
m_StiffnessMatrix+((int) x);</EM></FONT></DIV>
<DIV><FONT face=3DArial=20
size=3D2><EM> =
&=
nbsp;=20
</EM>defined at <STRONG>itkDeformableMesh3DFilter.txx/line=20
280</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>and why do you use data associated with =
cell=20
?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(d)=20
<STRONG>itkDeformableMesh3DFilter.txx/line 319</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG> </STRONG><EM>=20
m_Displacements->GetPoint (tp[0], v1_pt); <BR> =20
m_Displacements->GetPoint (tp[1], v2_pt); <BR> =20
m_Displacements->GetPoint (tp[2], v3_pt);</EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>where is defined the function GetPoint =
(same reason=20
as in (a)) ???</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(e)=20
<STRONG>itkDeformableMesh3DFilter.txx/line 489</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><EM> output->SetCellData(i,=20
(PixelType)x);</EM></FONT></DIV>
<DIV><EM><FONT face=3DArial size=3D2></FONT></EM> </DIV>
<DIV><FONT face=3DArial size=3D2>why do you modify the cell data at =
the output=20
? </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(f)=20
<STRONG>itkDeformableMesh3DFilter.txx/line 551</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV> <FONT face=3DArial size=3D2><EM>coord[0] =3D (int)=20
vec_p[0];<BR> coord[1] =3D (int) vec_p[1];<BR> coord[2] =3D =
(int)=20
vec_p[2];</EM></FONT></DIV>
<DIV><EM><FONT face=3DArial size=3D2></FONT></EM> </DIV>
<DIV><FONT face=3DArial size=3D2>are you sure there is no problem if =
<EM>the=20
vec_p[0]</EM> type is<EM> double</EM> <EM> ???</EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><EM></EM></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
(g)=20
<STRONG>itkDeformableMesh3DFilter.txx/line 555</STRONG></FONT></DIV>
<DIV><STRONG><FONT face=3DArial size=3D2></FONT></STRONG> </DIV>
<DIV><FONT face=3DArial size=3D2> if<EM> ( =
m_Potential->GetPixel(coord) !=3D=20
m_ObjectLabel )</EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><EM></EM></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2><EM>what is m_ObjectLabel ? =
</EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><EM></EM></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> =20
=20
(h)<STRONG>itkDeformableMesh3DFilter.txx/line 521</STRONG></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><STRONG></STRONG> </DIV>
<DIV><EM>template <typename TInputMesh, typename=20
TOutputMesh><BR>void<BR>DeformableMesh3DFilter<TInputMesh,=20
TOutputMesh><BR> =20
::PotentialFit() <BR></EM></DIV>
<DIV>what is the use of this function ? I don't see it is =
called=20
anywhere. </DIV>
<DIV> </DIV>
<DIV> =
=20
(i) <STRONG>itkDeformableMesh3DFilter.txx/line=20
819</STRONG></DIV>
<DIV> </DIV>
<DIV><EM> coa =3D -(v1[1]*(v2[2]-v3[2]) +=20
<BR> =
v2[1]*(v3[2]-v1[2])=20
+<BR> =
v3[1]*(v1[2]-v2[2]))=20
;<BR> cob =3D -(v1[2] * (v2[0]-v3[0])=20
+<BR> =
v2[2]*(v3[0]-v1[0])=20
+<BR> =
v3[2]*(v1[0]-v2[0]))=20
;<BR> coc =3D -(v1[0] * (v2[1]-v3[1])=20
+<BR> =
v2[0]*(v3[1]-v1[1])=20
+<BR> =
v3[0]*(v1[1]-v2[1]))=20
;</EM></DIV>
<DIV><EM></EM> </DIV>
<DIV>I don't understand these steps in the normals computing. What =
is it=20
based on ?</DIV>
<DIV> </DIV>
<DIV> =
=20
(j) <STRONG>itkDeformableMesh3DFilter.txx/line 783</STRONG></DIV>
<DIV><STRONG></STRONG> </DIV>
<DIV>Remark : in this function, you compute several times the =
normal at=20
one point.</DIV>
<DIV>The value of the normal saved is the last one computed. The other=20
computings are lost.</DIV>
<DIV>Is it right ?</DIV>
<DIV>So the normal at one node seems to be the consequence of only one =
cell=20
(triangle)....</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> =
=20
(k) <STRONG>itkDeformableMesh3DFilter.txx/line 749</STRONG></DIV>
<DIV> </DIV>
<DIV><EM> vec_for[0] =3D vec_for[0] + =
(vec_loc[0]-coord[0])*tmp_vec_1[0]=20
<BR> + (vec_loc[1]-coord[1])*tmp_vec_2[0] +=20
(vec_loc[2]-coord[2])*tmp_vec_3[0];<BR> vec_for[1] =3D vec_for[1] =
+=20
(vec_loc[1]-coord[1])*tmp_vec_2[1]<BR> +=20
(vec_loc[0]-coord[0])*tmp_vec_1[1] +=20
(vec_loc[2]-coord[2])*tmp_vec_3[1];<BR> vec_for[2] =3D vec_for[2] =
+=20
(vec_loc[2]-coord[2])*tmp_vec_3[2]<BR> +=20
(vec_loc[1]-coord[1])*tmp_vec_2[2] +=20
(vec_loc[0]-coord[0])*tmp_vec_1[2];</EM></DIV>
<DIV> </DIV>
<DIV>remark : here, in the GradientFit function, using generalized =
Taylor=20
theorem, I think you </DIV>
<DIV> =
=20
assumed the spacing to be equal to 1 in each direction.</DIV>
<DIV> =
=20
The voxel spacing can although be strongly different.<BR></DIV>
<DIV> =
=20
(l) <STRONG>The last but not least.</STRONG></DIV>
<DIV> &n=
bsp; =20
<STRONG>itkDeformableMesh3DFilter.txx/line 761</STRONG></DIV>
<DIV><STRONG></STRONG> </DIV>
<DIV> </DIV>
<DIV><EM> mag =3D vec_for[0]*vec_nor[0] + vec_for[1]*vec_nor[1]+=20
vec_for[2]*vec_nor[2];</EM></DIV>
<DIV><EM></EM> </DIV>
<DIV><EM> vec_for[0] =3D=20
m_GradientMagnitude*mag*vec_nor[0]/*num_for*/;<BR> vec_for[1] =3D=20
m_GradientMagnitude*mag*vec_nor[1]/*num_for*/; <BR> vec_for[2] =3D =
m_GradientMagnitude*mag*vec_nor[2]/*num_for*/; </EM></DIV>
<DIV><EM></EM> </DIV>
<DIV><EM> mag =3D sqrt (vec_for[0]*vec_for[0] + =
vec_for[1]*vec_for[1]+=20
vec_for[2]*vec_for[2]);<BR> if (mag > 0.5) =
<BR> for=20
(int i=3D0; i<3; i++) vec_for[i] =3D (0.5 * =
vec_for[i])/mag;<BR> =20
forces.Value() =3D vec_for;</EM><BR></DIV>
<DIV>You compute the force vector on one point by projection =
of the=20
gradient vector fitted </DIV>
<DIV>on the normal vector of this point.</DIV>
<DIV>So, the force direction is defined by the normal and not by the =
gradient=20
field.</DIV>
<DIV>Am I right ?</DIV>
<DIV> </DIV>
<DIV>So, considering I'm right, using GVF field in place of the =
simple=20
gradient field</DIV>
<DIV>would not conclude to better results using this=20
itkDeformableMesh3DFilter...</DIV>
<DIV>This GVF filed would although be so helpful to recover concave=20
regions....</DIV>
<DIV> </DIV>
<DIV>What do you think ?</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>I hope you will not be angry against me for writing such a long =
email, but=20
this is</DIV>
<DIV>very important for my thesis...</DIV>
<DIV> </DIV>
<DIV>Thanks in advance,</DIV>
<DIV> </DIV>
<DIV> Julien,BELGIUM</FONT></DIV></BODY></HTML>
------=_NextPart_001_002F_01C40866.F70F06A0--
------=_NextPart_000_002E_01C40866.F70F06A0
Content-Type: application/x-zip-compressed;
name="Verif.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Verif.zip"
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
eFBLBQYAAAAAAgACAHkAAAAaBwAAAAA=
------=_NextPart_000_002E_01C40866.F70F06A0--