#pragma once
#include "Point.h"
#include "Quadrilateral.h"
namespace ZXing {
class PerspectiveTransform
{
using value_t = PointF::value_t;
value_t a11, a12, a13, a21, a22, a23, a31, a32, a33 = NAN;
PerspectiveTransform(value_t a11, value_t a21, value_t a31, value_t a12, value_t a22, value_t a32, value_t a13,
value_t a23, value_t a33)
: a11(a11), a12(a12), a13(a13), a21(a21), a22(a22), a23(a23), a31(a31), a32(a32), a33(a33)
{}
PerspectiveTransform inverse() const;
PerspectiveTransform times(const PerspectiveTransform& other) const;
static PerspectiveTransform UnitSquareTo(const QuadrilateralF& q);
public:
PerspectiveTransform() = default;
PerspectiveTransform(const QuadrilateralF& src, const QuadrilateralF& dst);
PointF operator()(PointF p) const;
bool isValid() const { return !std::isnan(a33); }
};
}