00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#ifndef __itkAzimuthElevationToCartesianTransform_h
00019
#define __itkAzimuthElevationToCartesianTransform_h
00020
00021
#include "itkAffineTransform.h"
00022
#include "vnl/vnl_math.h"
00023
00073
namespace itk
00074 {
00075
00076
00077
template <
class TScalarType=
float,
00078
unsigned int NDimensions=3 >
00079 class ITK_EXPORT AzimuthElevationToCartesianTransform :
00080
public AffineTransform< TScalarType, NDimensions >
00081 {
00082
public:
00084 typedef AzimuthElevationToCartesianTransform
Self;
00085 typedef AffineTransform< TScalarType, NDimensions > Superclass;
00086 typedef SmartPointer<Self> Pointer;
00087 typedef SmartPointer<const Self> ConstPointer;
00088
00090
itkStaticConstMacro(SpaceDimension,
unsigned int, NDimensions);
00091
itkStaticConstMacro(ParametersDimension,
unsigned int,
00092 NDimensions * (NDimensions+1) );
00093
00095
itkTypeMacro( AzimuthElevationToCartesianTransform,
AffineTransform);
00096
00098
itkNewMacro(
Self );
00099
00101
typedef typename Superclass::ParametersType
ParametersType;
00102
00104
typedef typename Superclass::JacobianType
JacobianType;
00105
00107
typedef typename Superclass::ScalarType
ScalarType;
00108
00110
typedef typename Superclass::InputPointType
InputPointType;
00111 typedef typename Superclass::OutputPointType
OutputPointType;
00112
00114
typedef Matrix<TScalarType,
itkGetStaticConstMacro(SpaceDimension),
00115
itkGetStaticConstMacro(SpaceDimension)>
MatrixType;
00116
00118
void SetAzimuthElevationToCartesianParameters(
const double sampleSize,
00119
const double blanking,
00120
const long maxAzimuth,
00121
const long maxElevation,
00122
const double azimuthAngleSeparation,
00123
const double elevationAngleSeparation);
00124
00125
void SetAzimuthElevationToCartesianParameters(
const double sampleSize,
00126
const double blanking,
00127
const long maxAzimuth,
00128
const long maxElevation);
00129
00131
OutputPointType TransformPoint (
const InputPointType &point )
const;
00132
00134
inline InputPointType BackTransform(
const OutputPointType &point )
const;
00135
InputPointType BackTransformPoint(
const OutputPointType &point)
const;
00136
00138
void SetForwardAzimuthElevationToCartesian();
00139
00141
void SetForwardCartesianToAzimuthElevation();
00142
00144
OutputPointType TransformAzElToCartesian(
const InputPointType &point)
const;
00145
00147
OutputPointType TransformCartesianToAzEl(
const OutputPointType &point)
const;
00148
00153
itkSetMacro(MaxAzimuth,
long);
00154
00159
itkSetMacro(MaxElevation,
long);
00160
00162
itkSetMacro(RadiusSampleSize,
double);
00163
00165
itkSetMacro(AzimuthAngularSeparation,
double);
00166
00168
itkSetMacro(ElevationAngularSeparation,
double);
00169
00171
itkSetMacro(FirstSampleDistance,
double);
00172
00173
protected:
00175 AzimuthElevationToCartesianTransform();
00176
00178
virtual ~AzimuthElevationToCartesianTransform();
00179
00181
void PrintSelf(std::ostream &s,
Indent indent)
const;
00182
00183
private:
00184 AzimuthElevationToCartesianTransform(
const Self&);
00185
void operator=(
const Self&);
00186
00187
long m_MaxAzimuth;
00188
long m_MaxElevation;
00189
double m_RadiusSampleSize;
00190
double m_AzimuthAngularSeparation;
00191
double m_ElevationAngularSeparation;
00192
double m_FirstSampleDistance;
00193
bool m_ForwardAzimuthElevationToPhysical;
00194
00195 };
00196
00197
00198 }
00199
00200
00201
#ifndef ITK_MANUAL_INSTANTIATION
00202
#include "itkAzimuthElevationToCartesianTransform.txx"
00203
#endif
00204
00205
#endif
00206
00207