我有球形旋转数据,用笛卡尔坐标和phi和teta角描述。
我尝试使用rgl.spheres()表示一个球体,并使其在循环中与rgl.viewpoint()一起旋转但没有成功(只有很小的变化)。我想知道使用此函数是否是获得球体旋转的好方法。
我的第二次尝试是用rgl.surface()绘制用球面上的misc3d包的kde3d(x,y,z)计算的3d内核密度,但我不明白这个函数的每个参数。
你能给我一种在R?中显示这种旋转的方法吗?
答案 0 :(得分:0)
我不知道这是否对您有所帮助,但下面的示例显示了如何在3d空间中旋转数据坐标。你可以在一个循环中使用它来旋转你的坐标一系列度数:
library(rgl)
###Data generation
set.seed(1)
n <- 1000
mux <- 0
muy <- 0
muz <- 0
sdx <- 1
sdy <- 2
sdz <- 4
x <- rnorm(n, mux, sdx)
y <- rnorm(n, muy, sdy)
z <- rnorm(n, muz, sdz)
###Plot original coordinates
plot3d(x,y,z, t="s", col=8, size=3, aspect=c(1, dist(range(y))/dist(range(x)), dist(range(z))/dist(range(x))))
###rotate and tilt data
coord <- cbind(x,y,z)
theta <- 45
rotx <- matrix(c(1,0,0,0,cos(theta),sin(theta),0,-sin(theta),cos(theta)), 3,3)
coord <- coord %*% rotx
theta <- 45
roty <- matrix(c(cos(theta),0,-sin(theta),0,1,0,sin(theta),0,cos(theta)), 3,3)
coord <- coord %*% roty
theta <- 30
rotz <- matrix(c(cos(theta),sin(theta),0,-sin(theta),cos(theta),0,0,0,1), 3,3)
coord <- coord %*% rotz
###Plot rotated data
x <- coord[,1]; y <- coord[,2]; z <- coord[,3]
plot3d(x,y,z, t="s", col=8, size=1, aspect=c(1, dist(range(y))/dist(range(x)), dist(range(z))/dist(range(x))))