]> AND Private Git Repository - these_gilles.git/blob - THESE/codes/snake/basic_code/MakeContourClockwise3D.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
final
[these_gilles.git] / THESE / codes / snake / basic_code / MakeContourClockwise3D.m
1 function FV=MakeContourClockwise3D(FV)\r
2 % This function MakeContourClockwise will make a surface clockwise \r
3 % contour clockwise. This is done by calculating the volume inside the \r
4 % surface, if it is negative we change the surface orientation.\r
5 %\r
6 %  FV=MakeContourClockwise2D(FV);\r
7 %\r
8 %  input/output,\r
9 %    FV : Triangulated surface description with FV.faces and FV.vertices\r
10 %\r
11 % Function is written by D.Kroon University of Twente (July 2010)\r
12 \r
13 % Volume inside contour\r
14 volume=0;\r
15 for i=1:size(FV.faces,1)\r
16     a=FV.vertices(FV.faces(i,1),:); b=FV.vertices(FV.faces(i,2),:); c=FV.vertices(FV.faces(i,3),:);\r
17 \r
18     k=cross(b,c);\r
19     v = (a(1)*k(1)+a(2)*k(2)+a(3)*k(3))/6;\r
20     \r
21     volume=volume+v;\r
22 end\r
23 volume=-(volume);\r
24  \r
25 % If the area inside  the contour is positive, change from counter-clockwise to \r
26 % clockwise\r
27 if(volume<0), \r
28     FV.faces=[FV.faces(:,3) FV.faces(:,2) FV.faces(:,1)]; \r
29 end\r
30 \r
31 function c=cross(a,b)\r
32 a=a(:); b=b(:); \r
33 c = [a(2,:).*b(3,:)-a(3,:).*b(2,:)\r
34      a(3,:).*b(1,:)-a(1,:).*b(3,:)\r
35      a(1,:).*b(2,:)-a(2,:).*b(1,:)];\r
36