Wildmeshing Toolkit
Loading...
Searching...
No Matches
EnvelopeEnergy.hpp
1#pragma once
2
3#include <polysolve/nonlinear/Problem.hpp>
4#include <wmtk/Types.hpp>
5#include <wmtk/envelope/Envelope.hpp>
6
7namespace wmtk::optimization {
8
9
22class ExactDistanceEnergy2D : public polysolve::nonlinear::Problem
23{
24public:
25 using typename polysolve::nonlinear::Problem::Scalar;
26 using typename polysolve::nonlinear::Problem::THessian;
27 using typename polysolve::nonlinear::Problem::TVector;
28
29 ExactDistanceEnergy2D(const std::shared_ptr<SampleEnvelope>& envelope, const double weight = 1);
30
31 double value(const TVector& x) override;
32 void gradient(const TVector& x, TVector& gradv) override;
33 void hessian(const TVector& x, THessian& hessian) override
34 {
35 log_and_throw_error("Sparse functions do not exist, use dense solver");
36 }
37 void hessian(const TVector& x, MatrixXd& hessian) override;
38
39 void solution_changed(const TVector& new_x) override {}
40
41private:
42 std::shared_ptr<SampleEnvelope> m_envelope;
43 double m_weight;
44};
45
49class ExactDistanceEnergy3D : public polysolve::nonlinear::Problem
50{
51public:
52 using typename polysolve::nonlinear::Problem::Scalar;
53 using typename polysolve::nonlinear::Problem::THessian;
54 using typename polysolve::nonlinear::Problem::TVector;
55
56 ExactDistanceEnergy3D(const std::shared_ptr<SampleEnvelope>& envelope, const double weight = 1);
57
58 double value(const TVector& x) override;
59 void gradient(const TVector& x, TVector& gradv) override;
60 void hessian(const TVector& x, THessian& hessian) override
61 {
62 log_and_throw_error("Sparse functions do not exist, use dense solver");
63 }
64 void hessian(const TVector& x, MatrixXd& hessian) override;
65
66 void solution_changed(const TVector& new_x) override {}
67
68private:
69 std::shared_ptr<SampleEnvelope> m_envelope;
70 double m_weight;
71};
72
73} // namespace wmtk::optimization
The true w * d^2 to the exact piecewise-linear input with its TRUE Hessian.
Definition EnvelopeEnergy.hpp:23
Definition EnvelopeEnergy.hpp:50