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 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 PrintSelf(std::ostream &s, Indent indent) const;
00139
00141 void SetForwardAzimuthElevationToCartesian();
00142
00144 void SetForwardCartesianToAzimuthElevation();
00145
00147 OutputPointType TransformAzElToCartesian(const InputPointType &point) const;
00148
00150 OutputPointType TransformCartesianToAzEl(const OutputPointType &point) const;
00151
00156 itkSetMacro(MaxAzimuth, long);
00157
00162 itkSetMacro(MaxElevation, long);
00163
00165 itkSetMacro(RadiusSampleSize, double);
00166
00168 itkSetMacro(AzimuthAngularSeparation, double);
00169
00171 itkSetMacro(ElevationAngularSeparation, double);
00172
00174 itkSetMacro(FirstSampleDistance, double);
00175
00176 protected:
00178 AzimuthElevationToCartesianTransform();
00179
00181 virtual ~AzimuthElevationToCartesianTransform();
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