5#ifndef RADARELAB_MATRIX_H
6#define RADARELAB_MATRIX_H
16template<
typename Scalar>
struct Exponential {
17EIGEN_EMPTY_STRUCT_CTOR(Exponential)
19Scalar operator()(
const Scalar& base,
const Scalar& exponent)
const {
return std::pow(base,exponent); }
22template<
typename Scalar>
struct Logarithm {
23EIGEN_EMPTY_STRUCT_CTOR(Logarithm)
25Scalar operator()(
const Scalar& base,
const Scalar& argument)
const {
return std::log(argument)/std::log(base); }
28template<
typename Scalar>
struct Log10 {
29EIGEN_EMPTY_STRUCT_CTOR(Log10)
31Scalar operator()(
const Scalar& argument)
const {
return std::log10(argument); }
36struct Matrix2D :
public Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>
38 using Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>::Matrix;
40 T* row_ptr(
unsigned y) {
return this->data() + y * this->cols(); }
44 return this->unaryExpr(Log10<T>());
49 return base.binaryExpr(*
this,Exponential<T>());
58 Image(
unsigned sx,
unsigned sy=0)
Base for all matrices we use, since we rely on row-major data.