Subversion Repositories gelsvn

Rev

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

Rev 397 Rev 399
Line 27... Line 27...
27
#include <HMesh/x3d_save.h>
27
#include <HMesh/x3d_save.h>
28
 
28
 
29
#include <GLConsole/GLConsole.h>
29
#include <GLConsole/GLConsole.h>
30
 
30
 
31
#include "harmonics.h"
31
#include "harmonics.h"
32
#include "wireframe.h"
-
 
33
 
32
 
34
using namespace CGLA;
33
using namespace CGLA;
35
using namespace std;
34
using namespace std;
36
using namespace HMesh;
35
using namespace HMesh;
37
using namespace Geometry;
36
using namespace Geometry;
Line 192... Line 191...
192
	maximum_eigenvalue = mani.no_vertices()-1;
191
	maximum_eigenvalue = mani.no_vertices()-1;
193
	make_laplace_operator();
192
	make_laplace_operator();
194
	
193
	
195
	proj.resize(maximum_eigenvalue);
194
	proj.resize(maximum_eigenvalue);
196
	max_eig_values.resize(maximum_eigenvalue, 1e-10);
195
	max_eig_values.resize(maximum_eigenvalue, 1e-10);
-
 
196
 
197
	for(int es=0; es<maximum_eigenvalue; ++es)
197
	for(int es=0; es<maximum_eigenvalue; ++es)
198
	{
198
	{
-
 
199
		proj[es] = Vec3d(0.0);
199
		for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)
200
		for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)
200
		{
201
		{
201
			int i= v->touched;
-
 
-
 
202
 
202
			proj[es] += Vec3d(v->pos) * Q[es][i];
203
			proj[es] +=  Vec3d(v->pos) * Q[es][v->touched];
203
			max_eig_values[es] = max(max_eig_values[es], static_cast<float>(abs(Q[es][i])));
204
			max_eig_values[es] = max(max_eig_values[es], static_cast<float>(abs(Q[es][v->touched])));
204
		}
205
		}
205
	}
206
	}
206
}
207
}
207
 
208
 
208
void Harmonics::add_frequency(int es, float scale)
209
void Harmonics::add_frequency(int es, float scale)
209
{
210
{
210
	if(es<maximum_eigenvalue)
211
	if(es<maximum_eigenvalue)
211
		for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)
212
		for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)
212
		{
213
		{
213
			Vec3f& p = v->pos; 
214
			Vec3f p = Vec3f(proj[es]);
-
 
215
			float p0 = p[0];
-
 
216
			float p1 = p[1];
-
 
217
			float p2 = p[2];
-
 
218
			int idx = v->touched;
-
 
219
			double Qval = Q[es][v->touched];
-
 
220
			
214
			v->pos += Vec3f(proj[es] * Q[es][v->touched] * scale);
221
			v->pos += p * Qval * scale; // Vec3f(proj[es] * Q[es][v->touched] * scale); 	
215
		}
222
		}
216
	
-
 
217
}
223
}
218
 
224
 
219
void Harmonics::reset_shape()
225
void Harmonics::reset_shape()
220
{
226
{
221
	for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)
227
	for(VertexIter v=mani.vertices_begin(); v != mani.vertices_end(); ++v)