# rotateA: Rotate Conic Section Equation Parameters Or A Dataset, With... In fitConic: Fit Data to Any Conic Section

## Description

`rotateA` Takes as input "parA," the 6 values of the general quadratic Ax^2 + Bxy + Cy^2 +Dx + Ey +F = 0 , and applies a rotation angle to the coefficient set. `derotateA` calculates the rotation angle required to change the conic section defined by 'parA' into one that is orthogonal to the cartesian axes. `xyrot` is a simple function to rotate the coordinate system by theta.

## Usage

 ```1 2 3``` ```rotateA(parA, theta) derotateA(parA, ACmin = 1e-05) xyrot(x, y = NULL, theta) ```

## Arguments

 `parA` the 6 values of the general quadratic Ax^2 + Bxy + Cy^2 +Dx + Ey +F = 0 `theta` the angle, in radians, to rotate the conic section. `ACmin` A tolerance parameter for deciding that the product of parameters A and C is actually zero (in which case the type of conic section is more likely a parabola or a degenerate case) `x` Either a vector of x-coordinates or a Nx2 array of x and y coordinates, in which case the y-input is ignored `y` A vector of y-coordinates.

## Details

`derotateA` uses the following standard formula to calculate the angle. Derotate means to remove the xy term, i.e. force B = 0 . Some algebra shows that cot(2theta) = (A-C)/B and thus tan(2theta) = B/(A-C)

For `xyrot`, the internal `xy.coords` is used. If you enter only a vector for x and nothing for y, this will feed the new vectors 1:N for x and x-input for y to the rotator, which is probably not useful.

## Value

For `derotateA`,

 `parA` the new 6-parameter set defining the derotated conic. `theta` the derived angle by which the parameter set was rotated

For `rotateA`

 `parA` the new 6-parameter set defining the rotated conic. `theta` the angle by which the parameter set was rotated

For `xyrot` a Nx2 array of the x,y coordinates of the rotated data set.

## Author(s)

Carl Witthoft, carl@witthoft.com

`createConic`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18``` ```# make an ellipse and derotate it parGr <- c(-2.3,4.2,5,3,pi/4) xe <-seq(-8,9,by=.05) elipGr <- createConic(xe, parGr, 'e') plot(elipGr, t= 'l', asp = TRUE) # convert to ABCDEF form parAr <- GtoA(parGr,'e') elipAr <- createConic(xe,parAr\$parA) points(elipAr,pch='.',col='red') # remove rotation angle parAd <- derotateA(parAr\$parA) # returns theta = pi/4, how much the ellipse had been rotated by elipAd <-createConic(xe,parAd\$parA) lines(elipAd) # rotate back parAdr <- rotateA(parAd\$parA, parAd\$theta) elipAdr <-createConic(xe,parAdr\$parA) lines(elipAdr,lty=3, lwd = 3, col='green') ```