- 1

- 0

Im writing some java code and need help with some matrix math...

Basically Im trying to figure out how to rotate an ellipse given the std deviations, means, and covariance matrix such that the major and minor axes are along the direction that has the greatest variance. This is just a 2D ellipse, so my covariance matrix is 2x2. I know I need the eigenvectors of the covariance matrix to rotate the ellipse and the eigenvalues to scale the rotated ellipse, but Im confused in the details. Here is my basic idea:

1. Shift ellipse to origin

2. Scale ellipse

3. Rotate ellipse

4. Shift ellipse back

I remember from long time ago that you usually apply transformations, then unapply them (using the inverse), but I dont want to unrotate or unscale here do I?

Also, I am using the AffineTransform class in java, so I have to pass in a 3x3 transformation matrix. How do I get from my 2x2 covariance matrix and 2x2 eigenvectors/eigenvalues into the 3x3 form? By 3x3 I mean:

cos(theta) sin(theta) 0

-sin(theta) cos(theta) 0

0 0 1

(for a rotation matrix)

Basically Im trying to figure out how to rotate an ellipse given the std deviations, means, and covariance matrix such that the major and minor axes are along the direction that has the greatest variance. This is just a 2D ellipse, so my covariance matrix is 2x2. I know I need the eigenvectors of the covariance matrix to rotate the ellipse and the eigenvalues to scale the rotated ellipse, but Im confused in the details. Here is my basic idea:

1. Shift ellipse to origin

2. Scale ellipse

3. Rotate ellipse

4. Shift ellipse back

I remember from long time ago that you usually apply transformations, then unapply them (using the inverse), but I dont want to unrotate or unscale here do I?

Also, I am using the AffineTransform class in java, so I have to pass in a 3x3 transformation matrix. How do I get from my 2x2 covariance matrix and 2x2 eigenvectors/eigenvalues into the 3x3 form? By 3x3 I mean:

cos(theta) sin(theta) 0

-sin(theta) cos(theta) 0

0 0 1

(for a rotation matrix)

Last edited by a moderator: