R: Fit a 2D circle to an (x,y) dataset

lsfit.circle {circular} | R Documentation

## Fit a 2D circle to an (x,y) dataset

### Description

Fit a 2D circle to an (x,y) dataset using LS.

### Usage

    lsfit.circle(x, y, init = NULL, units = c("radians", "degrees"),
      template = c("none", "geographics"),
      modulo = c("asis", "2pi", "pi"), zero = 0,
      rotation = c("counter", "clock"), ...)
    ## S3 method for class 'lsfit.circle'
    print(x, digits = max(3, getOption("digits") - 3), ...)

### Arguments

`x` | either a matrix with two columns or a vector.
`y` | if `x` is a vector then `y` must be a vector with the same length.
`init` | initial values of the parameters. A vector of length 3 with the following components: radius of the circle, x-coordinate of the center, y-coordinate of the center. If `NULL` the vector is set to `c(max(c(abs(x-mean(x)), abs(y-mean(y)))), mean(x), mean(y)`.
`units` | the `units` used in defining the angles between observations and the center of the circle. See `circular`.
`template` | the `template` used in defining the angles between observations and the center of the circle. See `circular`.
`modulo` | the `modulo` used in defining the angles between observations and the center of the circle. See `circular`.
`zero` | the `zero` used in defining the angles between observations and the center of the circle. See `circular`.
`rotation` | the `rotation` used in defining the angles between observations and the center of the circle. See `circular`.
`...` | further parameters passed to the `optim` function.
`digits` | the number of digits to be printed.

### Details

`lsfit.circle` uses the `optim` function to minimize the sum of the squared residuals between the observations and the optimally fitting circle.

### Value

An object of class `lsfit.circle`.

`coefficients` | a vector of length 3 with the estimated radius and coordinate of the center of the fitted circle.
`x` | the x-coordinate.
`y` | the y-coordinate.
`x.centered` | the x-coordinate re-centered at the center of the circle.
`y.centered` | the y-coordinate re-centered at the center of the circle.
`angles` | angles of the observations with respect to the center coordinate of class `circular`.
`radius` | the distance between the observations and the center coordinate
`convergence` | value from the function optim.
`optim` | the output from the function optim.
`call` | the `match.call` result.

### Author(s)

Claudio Agostinelli and Ulric Lund

### References

Coope, I. (1993). Circle fitting by linear and non-linear least squares. Journal of Optimization Theory and Applications, 76, 381-388.

### Examples

    data(coope)
    res <- lsfit.circle(x=x.coope, y=y.coope)
    res

    plot(res)

    par(mfcol=c(1,2))
    plot(res$angles)
    hist(res$radius)

    plot(circular(0), type="n", xlim=c(-5.2, 5.2), ylim=c(-5.2, 5.2),
      xlab="The Radius of the circle \n is measured from the base line of the axes.")
    lines(x=res$angles, y=res$radius, join=TRUE, type="b")
    ff <- function(x) sqrt((res$coefficients[1]*cos(x))^2+(res$coefficients[1]*sin(x))^2)
    curve.circular(ff, add=TRUE, join=TRUE, nosort=FALSE, col=2)

    windrose(x=res$angles, y=res$radius)

[Package circular version 0.4-93 Index]