[R] rgl: ellipse3d with axes

Duncan Murdoch murdoch at stats.uwo.ca
Wed Sep 24 17:21:53 CEST 2008


On 24/09/2008 11:11 AM, Duncan Murdoch wrote:
> On 24/09/2008 10:12 AM, Michael Friendly wrote:
>> Duncan Murdoch wrote:
>>> The normals component contains the surface normals.  It is used to 
>>> help in rendering the surface, but isn't much use for your purposes.
>>> Unfortunately, I'm not familiar enough with the internals of princomp 
>>> to tell you how to get the axes you want.
>>>
>>> Duncan Murdoch
>> OK, then let me repharase it. The axes of the unit  sphere are like
>>
>> axes <- matrix(
>>     c(0, 0, -1,   0, 0, 1,
>>        0, -1, 0,   0, 1,  0,
>>        -1, 0, 0,   1, 0, 0),  6, 3, byrow=TRUE)
>> taken in pairs.  I'd like to transform these coordinates the same was as 
>> in ellipse3d() and add them to the plot.
> 
> That's easy, but it doesn't give you the principal axes of the ellipse. 
>   Just use
> 
> axes %*% chol(cov)
> 
> If you start with a unit sphere, this will give you points on its 
> surface, but not the ones you want.  For those you need the SVD or 
> eigenvectors.  This looks like it does what you want:
> 
> axes <- matrix(
>      c(0, 0, 0, # added origin
>         0, 0, -1,   0, 0, 1,
>         0, -1, 0,   0, 1,  0,
>         -1, 0, 0,   1, 0, 0),  7, 3, byrow=TRUE)
> axes <- axes[c(1,2,1,3,1,4,1,5,1,6,1,7),]  # add the origin before each

Why did I add the origin?  It's not needed, your axes were fine.  Sorry.

Duncan Murdoch



More information about the R-help mailing list