mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 16:40:38 +08:00
611b46b54b
Change-Id: I6aa7dd5b44bd42807118b4b0b565d6fa8b227371
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
#include "ceres/local_parameterization.h"
|
|
#include "ceres/manifold.h"
|
|
#include "glog/logging.h"
|
|
|
|
namespace ceres {
|
|
namespace internal {
|
|
|
|
// Adapter to wrap LocalParameterization and make them look like Manifolds.
|
|
//
|
|
// ManifoldAdapter NEVER takes ownership of local_parameterization.
|
|
class ManifoldAdapter : public Manifold {
|
|
public:
|
|
ManifoldAdapter(const LocalParameterization* local_parameterization)
|
|
: local_parameterization_(local_parameterization) {
|
|
CHECK(local_parameterization != nullptr);
|
|
}
|
|
|
|
virtual ~ManifoldAdapter() {}
|
|
|
|
bool Plus(const double* x,
|
|
const double* delta,
|
|
double* x_plus_delta) const override {
|
|
return local_parameterization_->Plus(x, delta, x_plus_delta);
|
|
}
|
|
|
|
bool PlusJacobian(const double* x, double* jacobian) const override {
|
|
return local_parameterization_->ComputeJacobian(x, jacobian);
|
|
}
|
|
|
|
bool RightMultiplyByPlusJacobian(const double* x,
|
|
const int num_rows,
|
|
const double* ambient_matrix,
|
|
double* tangent_matrix) const override {
|
|
return local_parameterization_->MultiplyByJacobian(
|
|
x, num_rows, ambient_matrix, tangent_matrix);
|
|
}
|
|
|
|
bool Minus(const double* y, const double* x, double* delta) const override {
|
|
LOG(FATAL) << "This should never be called.";
|
|
return false;
|
|
}
|
|
|
|
bool MinusJacobian(const double* x, double* jacobian) const override {
|
|
LOG(FATAL) << "This should never be called.";
|
|
return false;
|
|
}
|
|
|
|
int AmbientSize() const override {
|
|
return local_parameterization_->GlobalSize();
|
|
}
|
|
|
|
int TangentSize() const override {
|
|
return local_parameterization_->LocalSize();
|
|
}
|
|
|
|
private:
|
|
const LocalParameterization* local_parameterization_;
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace ceres
|