Difference between revisions of "Coordinate systems"
Line 15: | Line 15: | ||
==Convention for spherical coordinates== | ==Convention for spherical coordinates== | ||
+ | In the spherical coordinate system the position of a given point in space is specified by three numbers, (r, θ, φ): the radial distance of the radial line r connecting the point to the fixed point of origin (which is located on a fixed polar axis, or zenith direction axis, or z-axis); the polar angle θ of the radial line r; and the azimuthal angle φ of the radial line r. | ||
+ | *The elevation or polar angle θ is the angle with Z-hat. | ||
+ | *The elevation runs from 0 to pi. | ||
+ | *The azimuth or azimuthal angle φ is the angle of the projection to the XY plane with X-hat in the anti clockwise direction. | ||
+ | *The azimuth runs from 0 to 2pi. | ||
+ | This is the so-called physics convention (ISO 80000-2:2019). | ||
==Convention for double polar coordinates== | ==Convention for double polar coordinates== |
Revision as of 15:09, 14 February 2024
Convention for Cartesian coordinates
- Middle of the sphere is (0, 0, 0)
- X is left (-) to right (+)
- Y is back (-) to front (+)
- Z is bottom (-) to top (+)
The convention for head tracking coordinates is equal to Cartesian coordinates
- Horizontal = X
- Frontal = Y
- Vertical = Z
Convention for spherical coordinates
In the spherical coordinate system the position of a given point in space is specified by three numbers, (r, θ, φ): the radial distance of the radial line r connecting the point to the fixed point of origin (which is located on a fixed polar axis, or zenith direction axis, or z-axis); the polar angle θ of the radial line r; and the azimuthal angle φ of the radial line r.
- The elevation or polar angle θ is the angle with Z-hat.
- The elevation runs from 0 to pi.
- The azimuth or azimuthal angle φ is the angle of the projection to the XY plane with X-hat in the anti clockwise direction.
- The azimuth runs from 0 to 2pi.
This is the so-called physics convention (ISO 80000-2:2019).
Convention for double polar coordinates
- Azimuth is the angle of the projection to the XY plane with Y-hat.
- Elevation is angle of the projection to the YZ plane with Y-hat.
- Azimuth is between -pi and pi and positive in the X-hat direction.
- Elevation is between -pi/2 and pi/2 and positive in the Z-hat direction.
- In the negative Y direction the Elevation is mirrored (Elevation = angle with minus Y-hat).
Conversion from Cartesian to Double Polar
% Double polar coördinates is a non-standard coördinate system used for audiological purposes only.
The procedure for transformation is the following:
- 1 Project the Cartesian coordinates to the XY-plane.
- 2 This forms a two dimensional vector in the XY-plane.
- 3 Take the angle of this vector with the Y-hat. This is the azimuth.
- 4 Project the Cartesian coordinates to the YZ-plane.
- 5 Take the angle of this vector with the Y-hat. This is the elevation.
- 6 Angles larger than pi/2 are folded back by mirroring
How to get the angle between two vectors
The algorithm makes use of: dotproduct(V1,V2) = |V1|*|V2|*cos(angle) to determine the angle.
function theta = getAngle(V1, V2) dotProduct = dot(V1, V2); norm1 = norm(V1); norm2 = norm(V2); if norm1 * norm2 > 0 cosTheta = dotProduct / (norm1 * norm2); theta = acos(cosTheta); else theta = 0; end end
cart2double_polar(X, Y, Z)
function [azimuth, elevation, r] = cart2double_polar(X, Y, Z) r = sqrt(X^2+Y^2+Z^2); %azimuth: projection to XY plane, angle with Y_hat az_angleWithY_hat = getAngle([X,Y,0],[0,1,0]); %elevation: projection to YZ plane, angle with Y_hat el_angleWithY_hat = getAngle([0,Y,Z],[0,1,0]); % take the quadrants into account switch findQuadrant(X, Y) % Quadrants are numbered anti-clockwise case {1,4} azimuth = az_angleWithY_hat; case {2, 3} azimuth = - az_angleWithY_hat; case 0 % (X=0 and Y=0) azimuth = 0; end switch findQuadrant(Y, Z) case 1 elevation = el_angleWithY_hat; case 2 elevation = pi - el_angleWithY_hat; case 3 elevation = el_angleWithY_hat - pi; case 4 elevation = - el_angleWithY_hat; case 0 % (Y=0 and Z=0) elevation = 0; end