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.