rotateA: Rotate Conic Section Equation Parameters Or A Dataset, With...

View source: R/conicConverters.r

rotateAR Documentation

Rotate Conic Section Equation Parameters Or A Dataset, With Respect To X-Y Axes.

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

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

See Also

createConic

Examples

# 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')



fitConic documentation built on Aug. 29, 2023, 1:12 a.m.