Program Listing for File Projection.hpp
↰ Return to documentation for file (include/lvr2/reconstruction/Projection.hpp)
#ifndef PROJECTION_H
#define PROJECTION_H
#include <cmath>
#include "lvr2/reconstruction/ModelToImage.hpp"
namespace lvr2
{
class Projection
{
public:
Projection(int width, int height, int minH, int maxH, int minV, int maxV, bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
virtual void project(int&i , int&j, float& r, float x, float y, float z) = 0;
int w() { return m_width;}
int h() { return m_height;}
protected:
inline void toPolar(const float point[], float polar[]);
float m_xSize;
float m_ySize;
float m_xFactor;
float m_yFactor;
int m_width;
int m_height;
float m_minH;
float m_maxH;
float m_minV;
float m_maxV;
bool m_optimize;
ModelToImage::CoordinateSystem m_system;
void setImageRatio();
static constexpr float m_ph = 1.570796327;
};
class EquirectangularProjection: public Projection
{
public:
EquirectangularProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
virtual void project(int&i , int&j, float& r, float x, float y, float z) override;
protected:
float m_xFactor;
float m_yFactor;
int m_maxWidth;
int m_maxHeight;
float m_lowShift;
};
class MercatorProjection: public Projection
{
public:
MercatorProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_heightLow;
int m_maxWidth;
int m_maxHeight;
};
class CylindricalProjection: public Projection
{
public:
CylindricalProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_heightLow;
int m_maxWidth;
int m_maxHeight;
};
class ConicProjection : public Projection
{
public:
ConicProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_lat0;
float m_long0;
float m_lat1;
float m_phi1;
float m_phi2;
float m_n;
float m_c;
float m_rho0;
float m_maxX;
float m_minX;
float m_minY;
float m_maxY;
int m_maxWidth;
int m_maxHeight;
};
class RectilinearProjection : public Projection
{
public:
RectilinearProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_interval;
float m_iMinY;
float m_iMaxY;
float m_iMinX;
float m_iMaxX;
float m_coscRectilinear;
float m_l0;
float m_coscRectlinear;
float m_max;
float m_min;
float m_p1;
};
class PanniniProjection: public Projection
{
public:
PanniniProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_interval;
float m_iMinY;
float m_iMaxY;
float m_iMinX;
float m_iMaxX;
float m_max;
float m_min;
float m_l0;
float m_sPannini;
float m_p1;
};
class StereographicProjection: public Projection
{
public:
StereographicProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_interval;
float m_iMinY;
float m_iMaxY;
float m_iMinX;
float m_iMaxX;
float m_max;
float m_min;
float m_l0;
float m_p1;
float m_k;
};
class AzimuthalProjection: public Projection
{
public:
AzimuthalProjection(int width, int height,
int minH, int maxH,
int minV, int maxV,
bool optimize, ModelToImage::CoordinateSystem system = ModelToImage::NATIVE);
protected:
float m_kPrime;
float m_long0;
float m_phi1;
float m_maxX;
float m_minX;
float m_minY;
float m_maxY;
int m_maxWidth;
int m_maxHeight;
};
} // namespace lvr2
#endif // PROJECTION_H