当前位置:  开发笔记 > 编程语言 > 正文

在R中的球体上绘制点

如何解决《在R中的球体上绘制点》经验,为你挑选了1个好方法。

你能帮我在R做一个类似的情节吗?

在此输入图像描述

我希望它具有交互性,以便我可以旋转球体.我想我应该用rgl.我发现一个例子相似,我需要在这里,但是我无法找到一个方法来绘制一个网格,而不是一个充满球体.

UPD:可以帮助回答问题的可重现数据集(我从这里开始):

u <- runif(1000,0,1) 
v <- runif(1000,0,1) 
theta <- 2 * pi * u 
phi   <- acos(2 * v - 1) 
x <- sin(theta) * cos(phi) 
y <- sin(theta) * sin(phi) 
z <- cos(theta) 
library("lattice") 
cloud(z ~ x + y)

Ben Bolker.. 18

从...开始

library("rgl")
spheres3d(0,0,0,lit=FALSE,color="white")
spheres3d(0,0,0,radius=1.01,lit=FALSE,color="black",front="lines")

创建一个"线框"球体(我在这里通过绘制两个球体来做一点作弊,一个比另一个更大......可能有更好的方法来做到这一点,但我不能轻易/快速想办法).

来自我们得到的球形点拾取(图片来源)的Wolfram网页

类似地,我们可以选择u = cos(phi)来均匀分布(因此我们有du = sin phi dphi)并获得这些点x = sqrt(1-u^2)*cos(theta); y = sqrt(1-u^2)*sin(theta); z=u在[0,2pi]中的theta和在[-1,1]中的u,它们也均匀地分布在S ^ 2上.

所以:

set.seed(101)
n <- 50
theta <- runif(n,0,2*pi)
u <- runif(n,-1,1)
x <- sqrt(1-u^2)*cos(theta)
y <- sqrt(1-u^2)*sin(theta)
z <- u
spheres3d(x,y,z,col="red",radius=0.02)

球体需要更多的努力来渲染,但比points3d()(平面正方形)的结果更漂亮......

在此输入图像描述



1> Ben Bolker..:

从...开始

library("rgl")
spheres3d(0,0,0,lit=FALSE,color="white")
spheres3d(0,0,0,radius=1.01,lit=FALSE,color="black",front="lines")

创建一个"线框"球体(我在这里通过绘制两个球体来做一点作弊,一个比另一个更大......可能有更好的方法来做到这一点,但我不能轻易/快速想办法).

来自我们得到的球形点拾取(图片来源)的Wolfram网页

类似地,我们可以选择u = cos(phi)来均匀分布(因此我们有du = sin phi dphi)并获得这些点x = sqrt(1-u^2)*cos(theta); y = sqrt(1-u^2)*sin(theta); z=u在[0,2pi]中的theta和在[-1,1]中的u,它们也均匀地分布在S ^ 2上.

所以:

set.seed(101)
n <- 50
theta <- runif(n,0,2*pi)
u <- runif(n,-1,1)
x <- sqrt(1-u^2)*cos(theta)
y <- sqrt(1-u^2)*sin(theta)
z <- u
spheres3d(x,y,z,col="red",radius=0.02)

球体需要更多的努力来渲染,但比points3d()(平面正方形)的结果更漂亮......

在此输入图像描述

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有