WaveEquation/WaveEquation.cpp and SpectralWaveEquation/SpectralWaveEquation.cpp files.After you download the files, the first thing to do is compile the WaveEquation and SpectralWaveEquation executables.
GeometryProcessing.sln to open the workspace in Microsoft Visual Studios.
WaveEquation and SpectralWaveEquation executables by clicking on "Build" and then selecting "Build Solution". Please be sure that you are compiling for Release under x64 mode, as only those project settings were set. (If you need to compile under Debug, you will need to copy over the settings.)
WaveEquation and SpectralWaveEquation are compiled in Release mode for the 64-bit architecture and will be placed in the directory Bin/x64.
make to compile the WaveEquation and SpectralWaveEquation executables. (You can specify WaveEquation and SpectralWaveEquation as targets so you don't rebuild everything.)
WaveEquation and SpectralWaveEquation are compiled in Release mode and will be placed in the directory Bin/Linux.
WaveEquation
% WaveEquation
To run the visualization, invoke the executable as:
% WaveEquation --in <input geometry> [--timeStep <integration time-step>] [--rain <rain frequency>]
With:
<input geometry> the geometry to be processed.
<integration time-step> the time-step used for time-stepping the PDE using implicit integration. (The default value is 0.001.)
<rain frequency> the number of frames between rain drops. (The default value is 0, corresponding to no rain.)
SpectralWaveEquation
% SpectralWaveEquation
To run the visualization, invoke the executable as:
% SpectralWaveEquation --in <input geometry> [--timeStep <integration time-step>] [--sDimension <spectral dimension>] [--rain <rain frequency>]
With:
<input geometry> the geometry to be processed.
<integration time-step> the time-step used for time-stepping the PDE using implicit integration. (The default value is 0.001.)
<rain frequency> the number of frames between rain drops. (The default value is 0, corresponding to no rain.)
<spectral dimension> the numer of (lower) eigen-functions to use solving the PDE. (The default value is 400.)
WaveEquation and SpectralWaveEquation
[space] pauses/resumes the animation
[left mouse] rotates
[right mouse] zooms
[left mouse]+[ctrl] pans
'[' decreases the time-step
']' increases the time-step
[left mouse click] adds a negative impulse to the geometry under the moues
[right mouse click] adds a positive impulse to the geometry under the moues
'r' prompts for rain frequency
WaveEquation/WaveEquation.cpp:
WaveEquation constructor, you will need to initially set up the solver, WaveEquationViewer:_solver.
WaveEquationViewer::_updateNumericalFactorization member function to update the solver when the system matrix has changed. (Recall that, since the connectivity of the mesh has not changed, you only need to update the numerical factorization, not the symbolic one.)WaveEquationViewer::_mesh.values data member, in the body of the WaveEquationViewer::animate member function, using implicit time-stepping.WaveEquationViewer as needed.
SpectralWaveEquation/SpectralWaveEquation.cpp:
ForwardFourier to compute the Fourier coeffiicents from a signal (given the mass matrix and the pre-computed solution to the generalized stiffness eigen-problem).
InverseFourier to compute the signal from its Fourier coeffiicents (the pre-computed solution to the generalized stiffness eigen-problem).
GetWaveValueCoefficients to compute the Fourier coefficients of the displacement's value given the initial conditions and the current time.
GetWaveVelocityCoefficients to compute the Fourier coefficients of the displacement's value given the initial conditions and the current time.
ShiftWaveCoefficients to temporally shift the initial conditions to prescribed time.
WaveEquation and SpectralWaveEquation, what happens to the displacement over time?
SpectralWaveEquation, how does performance and quality behave with increased spectral dimension?
Include/RiemannianMesh.[h/inl], GradientDomainFiltering/GradientDomainFiltering.cpp, and GeodesicsInHeat/GeodesicsInHeat.cpp files.