使用θ和φ角度的球体旋转和/或球体表面上的3D核心密度的可视化

时间:2014-01-17 19:27:08

标签: r data-visualization rotation

我有球形旋转数据,用笛卡尔坐标和phi和teta角描述。

我尝试使用rgl.spheres()表示一个球体,并使其在循环中与rgl.viewpoint()一起旋转但没有成功(只有很小的变化)。我想知道使用此函数是否是获得球体旋转的好方法。

我的第二次尝试是用rgl.surface()绘制用球面上的misc3d包的kde3d(x,y,z)计算的3d内核密度,但我不明白这个函数的每个参数。

你能给我一种在R?中显示这种旋转的方法吗?

1 个答案:

答案 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))))

原始坐标(z轴上的最大扩展)

enter image description here

旋转坐标(最大展宽现在倾斜)

enter image description here