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
33Eigen::Vector2d newton_method_from_stack(
34 const Eigen::Vector2d& uv,
35 std::vector<std::array<double, 12>>& assembles,
36 std::function<Eigen::Vector3d(const Eigen::Vector2d& uv)> param,
37 std::function<double(const std::array<double, 12>&)> compute_energy,
38 std::function<void(const std::array<double, 12>&, Eigen::Vector2d&)> compute_jacobian,
39 std::function<void(const std::array<double, 12>&, Eigen::Matrix2d&)> compute_hessian);
40
48Eigen::Vector3d newton_method_from_stack(
49 std::vector<std::array<double, 12>>& stack,
50 std::function<double(const std::array<double, 12>&)> energy,
51 std::function<void(const std::array<double, 12>&, Eigen::Vector3d&)> jacobian,
52 std::function<void(const std::array<double, 12>&, Eigen::Matrix3d&)> hessian);
53
54Eigen::Vector3d gradient_descent_from_stack(
55 std::vector<std::array<double, 12>>& stack,
56 std::function<double(const std::array<double, 12>&)> energy,
57 std::function<void(const std::array<double, 12>&, Eigen::Vector3d&)> jacobian);
65std::array<size_t, 4> orient_preserve_tet_reorder(const std::array<size_t, 4>& tetra, size_t v0);
66
67// TODO: Add documentation
68Eigen::Vector3d try_project(
69 const Eigen::Vector3d& point,
70 const std::vector<std::array<double, 9>>& assembled_neighbor);
71} // namespace wmtk