Phong-Rodrigues Extrinsic Vector-Field Processing (Version 1.10)

links executables examples compilation usage changes

This software supports vector-field processing using the extrinsically defined Phong-Rodrigues basis. Supported applications include computation of:
LINKS

EXECUTABLES

EXAMPLES (WITH SAMPLE DATA)
For testing purposes, the provided archive contains the "kitten" model with two tangent vector-field constraints, as well as two tangent vector-fields defined over the torus.
COMPILATION

USAGE
    System Matrix Representation
    After being initialized with the vertices, normals, and triangles of a mesh, different system matrices can be computed.
    • The method
      Eigen::SparseMatrix<double> EmbeddedPhongMesh<2>::mass<QuadratureSamples>(void)

      return the symmetric 3·|V|×3·|V| mass matrix, with QuadratureSamples the numer of quadrature points per triangle.
    • The method:
      Eigen::SparseMatrix<double> EmbeddedPhongMesh<2>::stiffness<QuadratureSamples>(void)

      return the symmetric 3·|V|×3·|V| stiffness matrix defined by the connection Laplacian.
    • Symmetric 3·|V|×3·|V| matrices defining the stiffness with respect to individual components of the covariant matrix can be obtained invoking the method:
      Eigen::SparseMatrix<double> EmbeddedPhongMesh<2>::stiffness<QuadratureSamples,CovComponent>(void)

      with CovComponent an enum of type CovariantComponent describing the component of the covariant derivative used to define the stiffness.
    • The method:
      Eigen::SparseMatrix<double> EmbeddedPhongMesh<2>::tangentProlongation(void)

      returns the sparse 3·|V|×2·|V| matrix mapping two degrees of freedom at a vertex, representing the linear combinations of a tangent vector with respect to a chosen frame, to its coordinates in 3D. The frame is chosen to be orthonormal, so that if P is the matrix returned by the method, the matrix P.transpose()*P is the 3·|V|×3·|V| matrix describing the operation of projecting out the normal component.
    In general, the system matrices should be of size 2·|V|×2·|V| corresponding to optimizing over tangent vectors. For example, if M is the mass matrix and P prolongation, the associated mass matrix defined over tangent vectors will be P.transpose() * M * P.
    System Vector Reprsentation
    Extrinsic vector fields are represented by Eigen::VectorXds of size 3·|V|, with the x-, y-, and z-coordinates of the v-th vertex found at indices 3·v, 3·v+1, and 3·v+2, respectively.
    Abstract Vector-Field Representation
    An abstract vector-field over the mesh is an object of type MeshField that acts as an array of per-triangle vector-fields of abstract type TriangleField. Specifically:
    • The type MeshField supports a method:
      TriangleField MeshField::operator[](size_t)

      giving the restriction of the vector-field to the indexed triangle.
    • The type TriangleField supports a method
      Point<double,3> TriangleField(Point<double,2>)

      returning the value of the vector-field within the triangle.
    One can obtain Eigen::VectorXd of size 3·|V| giving the integral of the inner-product of the vector-field with each of the Phong-Rodrigues basis vector-fields by invoking the method:
    Eigen::VectorXd EmbeddedPhongMesh<2>::dual<QuadratureSamples>(MeshField &&) const

HISTORY OF CHANGES
Version 1.00: Version 1.10:

HOME