RotationGenerator3d
Computes a list of uniformly distributed three-dimensional rotations on the unit sphere.
Access to parameter description
For an introduction: section 3D Rotations.
This algorithm generates a list of 3D rotations homogeneously distributed around the unit sphere.
The rotations are expressed as proper Euler angles ZXZ contained in an output data frame.
Each line of this output table represents a rotation configuration with its three proper Euler angles presented in three columns, respectively called RZ1, RX2, and RZ3.
By default, the rotations are provided in the 3D rotation group SO(3) and their computation is based on the Super-Fibonacci spirals algorithm. This is particularly relevant when the object to rotate is not symmetric, in order to cover more rotation configurations.
When the object to rotate presents a symmetry axis, like a cylinder or an ellipsoid, it is more relevant to generate only orientations by enabling the orientationOnly option. The computation of these orientations is based on the Fibonacci spirals algorithm. In this way, the generated distribution of orientations is more uniform
Figure 1. Visualization of 8 generated rotations: (a) a 3D image containing a synthetic object,
the initial object and its 8 rotations (b) in SO(3), (c) in orientation mode
References
Access to parameter description
For an introduction: section 3D Rotations.
This algorithm generates a list of 3D rotations homogeneously distributed around the unit sphere.
The rotations are expressed as proper Euler angles ZXZ contained in an output data frame.
Each line of this output table represents a rotation configuration with its three proper Euler angles presented in three columns, respectively called RZ1, RX2, and RZ3.
By default, the rotations are provided in the 3D rotation group SO(3) and their computation is based on the Super-Fibonacci spirals algorithm. This is particularly relevant when the object to rotate is not symmetric, in order to cover more rotation configurations.
When the object to rotate presents a symmetry axis, like a cylinder or an ellipsoid, it is more relevant to generate only orientations by enabling the orientationOnly option. The computation of these orientations is based on the Fibonacci spirals algorithm. In this way, the generated distribution of orientations is more uniform
![]() (a) |
![]() (b) |
![]() (c) |
the initial object and its 8 rotations (b) in SO(3), (c) in orientation mode
References
- M. Alexa. "Super-Fibonacci Spirals: Fast, Low-Discrepancy Sampling of SO(3)". Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)., pp. 8291-8300, 2022.
- J.L. Brown, Jr., "Zeckendorf's theorem and some applications", Fibonacci Quarterly 2, pp. 163-168, 1964.
Function Syntax
This function returns rotationTable.
// Function prototype
std::shared_ptr< iolink::DataFrameView > rotationGenerator3d( RotationGenerator3d::SamplingMode samplingMode, uint32_t numberOfRotations, double angularSampling, bool orientationOnly, std::shared_ptr< iolink::DataFrameView > rotationTable = nullptr );
This function returns rotationTable.
// Function prototype. rotation_generator_3d(sampling_mode: RotationGenerator3d.SamplingMode = RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS, number_of_rotations: int = 256, angular_sampling: float = 5, orientation_only: bool = False, rotation_table: Union[iolink.DataFrameView, None] = None) -> Union[iolink.DataFrameView, None]
This function returns rotationTable.
// Function prototype. public static IOLink.DataFrameView RotationGenerator3d( RotationGenerator3d.SamplingMode samplingMode = ImageDev.RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS, UInt32 numberOfRotations = 256, double angularSampling = 5, bool orientationOnly = false, IOLink.DataFrameView rotationTable = null );
Class Syntax
Parameters
Parameter Name | Description | Type | Supported Values | Default Value | |||||
---|---|---|---|---|---|---|---|---|---|
![]() |
numberOfRotations |
The number of desired rotations | UInt32 | >=1 | 256 | ||||
![]() |
samplingMode |
The way to define the distribution of rotations to generate.
|
Enumeration | NUMBER_OF_ROTATIONS | |||||
![]() |
angularSampling |
The pitch angle, in degree, between two neighbor orientations. | Float64 | [0, 180] | 5 | ||||
![]() |
orientationOnly |
The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | Bool | false | |||||
![]() |
rotationTable |
The output DataFrameView containing the rotations | DataFrameView | nullptr |
Parameter Name | Description | Type | Supported Values | Default Value | |||||
---|---|---|---|---|---|---|---|---|---|
![]() |
number_of_rotations |
The number of desired rotations | uint32 | >=1 | 256 | ||||
![]() |
sampling_mode |
The way to define the distribution of rotations to generate.
|
enumeration | NUMBER_OF_ROTATIONS | |||||
![]() |
angular_sampling |
The pitch angle, in degree, between two neighbor orientations. | float64 | [0, 180] | 5 | ||||
![]() |
orientation_only |
The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | bool | False | |||||
![]() |
rotation_table |
The output DataFrameView containing the rotations | data_frame_view | None |
Parameter Name | Description | Type | Supported Values | Default Value | |||||
---|---|---|---|---|---|---|---|---|---|
![]() |
numberOfRotations |
The number of desired rotations | UInt32 | >=1 | 256 | ||||
![]() |
samplingMode |
The way to define the distribution of rotations to generate.
|
Enumeration | NUMBER_OF_ROTATIONS | |||||
![]() |
angularSampling |
The pitch angle, in degree, between two neighbor orientations. | Float64 | [0, 180] | 5 | ||||
![]() |
orientationOnly |
The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | Bool | false | |||||
![]() |
rotationTable |
The output DataFrameView containing the rotations | DataFrameView | null |
Object Examples
RotationGenerator3d rotationGenerator3dAlgo; rotationGenerator3dAlgo.setSamplingMode( RotationGenerator3d::SamplingMode::NUMBER_OF_ROTATIONS ); rotationGenerator3dAlgo.setNumberOfRotations( 256 ); rotationGenerator3dAlgo.setAngularSampling( 5 ); rotationGenerator3dAlgo.setOrientationOnly( false ); rotationGenerator3dAlgo.execute(); std::cout << "rotationTable:" << rotationGenerator3dAlgo.rotationTable()->shape();
rotation_generator_3d_algo = imagedev.RotationGenerator3d() rotation_generator_3d_algo.sampling_mode = imagedev.RotationGenerator3d.NUMBER_OF_ROTATIONS rotation_generator_3d_algo.number_of_rotations = 256 rotation_generator_3d_algo.angular_sampling = 5 rotation_generator_3d_algo.orientation_only = False rotation_generator_3d_algo.execute() print("rotation_table:", str(rotation_generator_3d_algo.rotation_table))
RotationGenerator3d rotationGenerator3dAlgo = new RotationGenerator3d { samplingMode = RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS, numberOfRotations = 256, angularSampling = 5, orientationOnly = false }; rotationGenerator3dAlgo.Execute(); Console.WriteLine( "rotationTable:" + rotationGenerator3dAlgo.rotationTable.ToString() );
Function Examples
auto result = rotationGenerator3d( RotationGenerator3d::SamplingMode::NUMBER_OF_ROTATIONS, 256, 5, false ); std::cout << "rotationTable:" << result->shape();
result = imagedev.rotation_generator_3d(imagedev.RotationGenerator3d.NUMBER_OF_ROTATIONS, 256, 5, False) print("rotation_table:", str(result))
IOLink.DataFrameView result = Processing.RotationGenerator3d( RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS, 256, 5, false ); Console.WriteLine( "rotationTable:" + result.ToString() );
© 2025 Thermo Fisher Scientific Inc. All rights reserved.