ITK  6.0.0
Insight Toolkit
itkAzimuthElevationToCartesianTransform.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18#ifndef itkAzimuthElevationToCartesianTransform_h
19#define itkAzimuthElevationToCartesianTransform_h
20
21#include "itkAffineTransform.h"
22#include "itkMath.h"
23
24namespace itk
25{
87template <typename TParametersValueType = double, unsigned int VDimension = 3>
88class ITK_TEMPLATE_EXPORT AzimuthElevationToCartesianTransform
89 : public AffineTransform<TParametersValueType, VDimension>
90{
91public:
92 ITK_DISALLOW_COPY_AND_MOVE(AzimuthElevationToCartesianTransform);
93
99
101 static constexpr unsigned int SpaceDimension = VDimension;
102 static constexpr unsigned int ParametersDimension = VDimension * (VDimension + 1);
103
105 itkOverrideGetNameOfClassMacro(AzimuthElevationToCartesianTransform);
106
108 itkNewMacro(Self);
109
111 using typename Superclass::ParametersType;
112 using typename Superclass::FixedParametersType;
114
116 using typename Superclass::JacobianType;
119
121 using typename Superclass::ScalarType;
122
124 using typename Superclass::InputPointType;
125 using typename Superclass::OutputPointType;
126
129
131 void
133 const double firstSampleDistance,
134 const long maxAzimuth,
135 const long maxElevation,
136 const double azimuthAngleSeparation,
137 const double elevationAngleSeparation);
138
139 void
141 const double firstSampleDistance,
142 const long maxAzimuth,
143 const long maxElevation);
144
147 TransformPoint(const InputPointType & point) const override;
148
150 inline InputPointType
152 {
153 InputPointType result;
154
155 if (m_ForwardAzimuthElevationToPhysical)
156 {
157 result = static_cast<InputPointType>(TransformCartesianToAzEl(point));
158 }
159 else
160 {
161 result = static_cast<InputPointType>(TransformAzElToCartesian(point));
162 }
163 return result;
164 }
165
166 inline InputPointType
168 {
169 return BackTransform(point);
170 }
171
172
175 TransformCategoryEnum
176 GetTransformCategory() const override
177 {
178 return Self::TransformCategoryEnum::UnknownTransformCategory;
179 }
180
183 void
185
188 void
190
194
198
203 itkSetMacro(MaxAzimuth, long);
204 itkGetConstMacro(MaxAzimuth, long);
211 itkSetMacro(MaxElevation, long);
212 itkGetConstMacro(MaxElevation, long);
216 itkSetMacro(RadiusSampleSize, double);
217 itkGetConstMacro(RadiusSampleSize, double);
221 itkSetMacro(AzimuthAngularSeparation, double);
222 itkGetConstMacro(AzimuthAngularSeparation, double);
226 itkSetMacro(ElevationAngularSeparation, double);
227 itkGetConstMacro(ElevationAngularSeparation, double);
231 itkSetMacro(FirstSampleDistance, double);
232 itkGetConstMacro(FirstSampleDistance, double);
235protected:
238
241
243 void
244 PrintSelf(std::ostream & os, Indent indent) const override;
245
246private:
247 long m_MaxAzimuth{};
248 long m_MaxElevation{};
249 double m_RadiusSampleSize{};
250 double m_AzimuthAngularSeparation{};
251 double m_ElevationAngularSeparation{};
252 double m_FirstSampleDistance{};
253 bool m_ForwardAzimuthElevationToPhysical{};
254}; // class AzimuthElevationToCartesianTransform
255} // namespace itk
256
257#ifndef ITK_MANUAL_INSTANTIATION
258# include "itkAzimuthElevationToCartesianTransform.hxx"
259#endif
260
261#endif /* itkAzimuthElevationToCartesianTransform_h */
Array2D class representing a 2D array.
Definition: itkArray2D.h:43
Transforms from an azimuth, elevation, radius coordinate system to a Cartesian coordinate system,...
OutputPointType TransformAzElToCartesian(const InputPointType &point) const
~AzimuthElevationToCartesianTransform() override=default
void PrintSelf(std::ostream &os, Indent indent) const override
OutputPointType TransformCartesianToAzEl(const OutputPointType &point) const
void SetAzimuthElevationToCartesianParameters(const double sampleSize, const double firstSampleDistance, const long maxAzimuth, const long maxElevation, const double azimuthAngleSeparation, const double elevationAngleSeparation)
InputPointType BackTransform(const OutputPointType &point) const
OutputPointType TransformPoint(const InputPointType &point) const override
void SetAzimuthElevationToCartesianParameters(const double sampleSize, const double firstSampleDistance, const long maxAzimuth, const long maxElevation)
InputPointType BackTransformPoint(const OutputPointType &point) const
Control indentation during Print() invocation.
Definition: itkIndent.h:50
vnl_matrix_fixed< ParametersValueType, VOutputDimension, VInputDimension > JacobianPositionType
Definition: itkTransform.h:131
vnl_matrix_fixed< ParametersValueType, VInputDimension, VOutputDimension > InverseJacobianPositionType
Definition: itkTransform.h:132
A templated class holding a M x N size Matrix.
Definition: itkMatrix.h:53
Class to hold and manage different parameter types used during optimization.
A templated class holding a geometric point in n-Dimensional space.
Definition: itkPoint.h:54
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
*par Constraints *The filter image with at least two dimensions and a vector *length of at least The theory supports extension to scalar but *the implementation of the itk vector classes do not **The template parameter TRealType must be floating point(float or double) or *a user-defined "real" numerical type with arithmetic operations defined *sufficient to compute derivatives. **\par Performance *This filter will automatically multithread if run with *SetUsePrincipleComponents