Wildmeshing Toolkit
Loading...
Searching...
No Matches
TetraQualityUtils.hpp
1#pragma once
2
3#include <Eigen/Core>
4#include <optional>
5
6namespace wmtk {
7
16double newton_method_from_stack(
17 const double t,
18 std::vector<std::array<double, 12>>& assembles,
19 std::function<Eigen::Vector3d(const double t)> param,
20 std::function<double(const std::array<double, 12>&)> compute_energy,
21 std::function<double(const std::array<double, 12>&)> compute_jacobian,
22 std::function<double(const std::array<double, 12>&)> compute_hessian);
23
24
26// * Newton method for *linear* 2d parameterization.
27// *
28// * @param uv coordinates for the first vertex in the stack
29// * @param stack with flattened 4x3 vertices positions, with the mover vertex always on the front.
30// * This is the same convention with AMIPS_energy
31// * @return Descend direction as computed from Newton method, (or gradient descent if Newton
32// fails).
33// */
34// Eigen::Vector2d newton_method_from_stack(
35// const Eigen::Vector2d& uv,
36// std::vector<std::array<double, 12>>& assembles,
37// std::function<Eigen::Vector3d(const Eigen::Vector2d& uv)> param,
38// std::function<double(const std::array<double, 12>&)> compute_energy,
39// std::function<void(const std::array<double, 12>&, Eigen::Vector2d&)> compute_jacobian,
40// std::function<void(const std::array<double, 12>&, Eigen::Matrix2d&)> compute_hessian);
41
49Eigen::Vector3d newton_method_from_stack(
50 std::vector<std::array<double, 12>>& stack,
51 std::function<double(const std::array<double, 12>&)> energy,
52 std::function<void(const std::array<double, 12>&, Eigen::Vector3d&)> jacobian,
53 std::function<void(const std::array<double, 12>&, Eigen::Matrix3d&)> hessian);
54
55Eigen::Vector2d newton_method_from_stack(
56 std::vector<std::array<double, 6>>& stack,
57 std::function<double(const std::array<double, 6>&)> energy,
58 std::function<void(const std::array<double, 6>&, Eigen::Vector2d&)> jacobian,
59 std::function<void(const std::array<double, 6>&, Eigen::Matrix2d&)> hessian);
60
61Eigen::Vector3d gradient_descent_from_stack(
62 std::vector<std::array<double, 12>>& stack,
63 std::function<double(const std::array<double, 12>&)> energy,
64 std::function<void(const std::array<double, 12>&, Eigen::Vector3d&)> jacobian);
72std::array<size_t, 4> orient_preserve_tet_reorder(const std::array<size_t, 4>& tetra, size_t v0);
73
74// TODO: Add documentation
75Eigen::Vector3d try_project(
76 const Eigen::Vector3d& point,
77 const std::vector<std::array<double, 9>>& assembled_neighbor);
78} // namespace wmtk