Subversion Repositories gelsvn

Rev

Rev 39 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 39 Rev 62
Line 17... Line 17...
17
		int n=0;
17
		int n=0;
18
		
18
		
19
		VertexCirculator vc(vi);
19
		VertexCirculator vc(vi);
20
		for(;!vc.end();++vc)
20
		for(;!vc.end();++vc)
21
			{
21
			{
22
				avg_pos += vc.get_vertex()->get_pos();
22
				avg_pos += vc.get_vertex()->pos;
23
				++n;
23
				++n;
24
			}
24
			}
25
		return avg_pos/n-vi->get_pos();
25
		return avg_pos/n-vi->pos;
26
	}
26
	}
27
 
27
 
28
	void laplacian_smooth(Manifold& m, float t)
28
	void laplacian_smooth(Manifold& m, float t)
29
	{
29
	{
30
		vector<Vec3f> pos(m.no_vertices());
30
		vector<Vec3f> pos(m.no_vertices());
31
		int i=0;
31
		int i=0;
32
		for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); ++vi,++i)
32
		for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); ++vi,++i)
33
			if(!vi->is_boundary())
33
			if(!is_boundary(vi))
34
				pos[i] =  t*laplacian(vi) + vi->get_pos();
34
				pos[i] =  t*laplacian(vi) + vi->pos;
35
		i=0;
35
		i=0;
36
		for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); ++vi,++i)
36
		for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); ++vi,++i)
37
			if(!vi->is_boundary())
37
			if(!is_boundary(vi))
38
				vi->pos = pos[i];
38
				vi->pos = pos[i];
39
	}
39
	}
40
 
40
 
41
	void taubin_smooth(Manifold& m, int iter)
41
	void taubin_smooth(Manifold& m, int iter)
42
	{
42
	{
Line 44... Line 44...
44
			{
44
			{
45
				vector<Vec3f> laplacian(m.no_vertices());
45
				vector<Vec3f> laplacian(m.no_vertices());
46
				int i=0;
46
				int i=0;
47
				for(VertexIter vi = m.vertices_begin();	
47
				for(VertexIter vi = m.vertices_begin();	
48
						vi != m.vertices_end(); ++vi,++i)
48
						vi != m.vertices_end(); ++vi,++i)
49
					if(!vi->is_boundary())
49
					if(!is_boundary(vi))
50
						{
50
						{
51
							Vec3f avg_pos;
51
							Vec3f avg_pos;
52
							int n=0;
52
							int n=0;
53
							
53
							
54
							VertexCirculator vc(vi);
54
							VertexCirculator vc(vi);
Line 60... Line 60...
60
							laplacian[i] =  avg_pos/n - vi->pos;
60
							laplacian[i] =  avg_pos/n - vi->pos;
61
						}
61
						}
62
				i=0;
62
				i=0;
63
				for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); 
63
				for(VertexIter vi = m.vertices_begin();	vi != m.vertices_end(); 
64
						++vi,++i)
64
						++vi,++i)
65
					if(!vi->is_boundary())
65
					if(!is_boundary(vi))
66
						vi->pos += (j%2 == 0) ? 0.5 * laplacian[i] : -0.52 * laplacian[i];
66
						vi->pos += (j%2 == 0) ? 0.5 * laplacian[i] : -0.52 * laplacian[i];
67
			}
67
			}
68
	}
68
	}
69
 
69
 
70
 
70