Function

vDSP_polar(_:_:_:_:_:)

Converts single-precision rectangular coordinates to polar coordinates, using the specified stride.

Declaration

func vDSP_polar(_ __A: UnsafePointer<Float>, _ __IA: vDSP_Stride, _ __C: UnsafeMutablePointer<Float>, _ __IC: vDSP_Stride, _ __N: vDSP_Length)

Parameters

__A

Single-precision real input vector.

__IA

Stride for A, must be even.

__C

Single-precision output vector.

__IC

Stride for C, must be even.

__N

Number of ordered pairs processed.

Discussion

This performs the following operation:

for (n = 0; n < N; ++n)
{
    x = A[n*IA+0];
    y = A[n*IA+1];
    C[n*IC+0] = sqrt(x**2 + y**2);
    C[n*IC+1] = atan2(y, x);
}

Converts rectangular coordinates to polar coordinates. Vector A defines Cartesian (x, y) pairs. The function writes polar (rho, theta) pairs, where rho is the radius and theta is the angle in the range [-pi, pi] to vector C. N specifies the number of coordinate pairs in A and C.

Coordinate pairs are adjacent elements in the array, regardless of stride; stride is the distance from one coordinate pair to the next.

The following code shows how to convert a single pair of rectangular coordinates to their polar equivalent.

let x = 5.0
let y = 5.0

let rectangularCoordinates = [x, y]

var polarCoordinates: [Double] = [0, 0]

let stride = vDSP_Stride(2)
let n = vDSP_Length(1)

vDSP_polarD(rectangularCoordinates, stride,
            &polarCoordinates, stride,
            n)

let radius = polarCoordinates[0]
let angle = Measurement(value: polarCoordinates[1],
                        unit: UnitAngle.radians)
    .converted(to: UnitAngle.degrees)
    .value

On return, radius is 7.07, and angle is 45.

This function performs the inverse operation of vDSP_rect, which converts polar to rectangular coordinates.

See Also

Single-Vector Polar-Rectangular Conversion

static func polarToRectangular<U>(U) -> [Double]

Returns double-precision polar coordinates converted to rectangular coordinates.

static func polarToRectangular<U>(U) -> [Float]

Returns single-precision polar coordinates converted to rectangular coordinates.

static func rectangularToPolar<U>(U) -> [Double]

Returns double-precision rectangular coordinates converted to polar coordinates.

static func rectangularToPolar<U>(U) -> [Float]

Returns single-precision rectangular coordinates converted to polar coordinates.

static func convert<U, V>(polarCoordinates: U, toRectangularCoordinates: inout V)

Converts double-precision polar coordinates to rectangular coordinates.

static func convert<U, V>(polarCoordinates: U, toRectangularCoordinates: inout V)

Converts single-precision polar coordinates to rectangular coordinates.

static func convert<U, V>(rectangularCoordinates: U, toPolarCoordinates: inout V)

Converts double-precision rectangular coordinates to polar coordinates.

static func convert<U, V>(rectangularCoordinates: U, toPolarCoordinates: inout V)

Converts single-precision rectangular coordinates to polar coordinates.

func vDSP_polarD(UnsafePointer<Double>, vDSP_Stride, UnsafeMutablePointer<Double>, vDSP_Stride, vDSP_Length)

Converts double-precision rectangular coordinates to polar coordinates, using the specified stride.

func vDSP_rect(UnsafePointer<Float>, vDSP_Stride, UnsafeMutablePointer<Float>, vDSP_Stride, vDSP_Length)

Converts single-precision polar coordinates to rectangular coordinates, using the specified stride.

func vDSP_rectD(UnsafePointer<Double>, vDSP_Stride, UnsafeMutablePointer<Double>, vDSP_Stride, vDSP_Length)

Converts double-precision polar coordinates to rectangular coordinates, using the specified stride.

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software