Module |
|
Header |
/Engine/Plugins/Experimental/GeometryProcessing/Source/MeshSolverUtilities/Public/MeshSmoothingUtilities.h |
Include |
#include "MeshSmoothingUtilities.h" |
Source |
/Engine/Plugins/Experimental/GeometryProcessing/Source/MeshSolverUtilities/Private/LaplacianMeshSmoother.cpp |
namespace MeshSmoothingOperators
{
void MeshSmoothingOperators::ComputeSmoothing_BiHarmonic
(
const ELaplacianWeightScheme WeightingScheme,
const FDynamicMesh3 & OriginalMesh,
const double Speed,
const double Weight,
const int32 NumIterations,
TArray< FVector3d > & PositionArray
)
}
Note: for discussion of implicit / explicit integration of diffusion and biharmonic equations see "Implicit Fairing of Irregular Meshes using Diffusion and Curvature Flow" - M Desbrun 99. although the following suggests an additional source term could be included in the implicit solve for better accuracy. or "Generalized Surface Flows for Mesh Processing" Eckstein et al. 2007 This is equivalent to taking a single backward Euler time step of bi-harmonic diffusion where L is the Laplacian (Del^2) , and L^T L is an approximation of the Del^4.
dp/dt = - k*k L^T L[p]
p{n+1} + dt * k * k L^TL [p^{n+1}] = p{n}
re-write as L^TL[p^{n+1}] + weight * weight p{n+1} = weight * weight p{n} with weight = 1 / (k * Sqrt[dt] )
The result is returned in the PositionArray