gpt4 book ai didi

R 透明平面 3d 不应隐藏 plot3d 点/球体

转载 作者:行者123 更新时间:2023-12-04 03:12:39 24 4
gpt4 key购买 nike

我想将点/球体和平面放在一个 3d 图中。我希望飞机的 alpha 透明度为 ~0.5(它既不应该完全透明,也不应该完全不透明)。这样我就可以看到通过平面的点/球体和轴。

我试过了:

library(rgl)

#Generating points:
m=20
a1=runif(m,-1,1)
a2=runif(m,-1,1)
b=a1+2*a2+rnorm(m,mean=0,sd=0.3)

# Plotting the points:
plot3d(a1,a2,b, type='s', xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(-3.1, 3.1),xlab = 'a_i,1', ylab = 'a_i,2', zlab = 'b_i',alpha=0.9)
# Plotting the transparent plane:
planes3d(1, 2, -1, 0, col = 'red', alpha = 0.1, add=T)
# plot the points again (because I thought, maybe the the execution order could be relevant)
plot3d(a1,a2,b, add=T, type='s', xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(-3.1, 3.1),xlab = 'a_i,1', ylab = 'a_i,2', zlab = 'b_i',alpha=0.9)

我得到的结果是我可以看到穿过平面的轴,但我看不到隐藏在平面后面的点/球体:(

部分球体无法通过平面看到:
enter image description here

我还希望通过平面看到点/球体(就像它对轴工作得很好,可以通过平面看到)。
我想看到所有 20 个点/球体,还有那些被飞机覆盖/隐藏/隐藏/掩盖的点。

最佳答案

您正在使用“面向数据的例程”,它可以快速渲染,但会扭曲轴,因为数据点通常在几何上彼此不相关。可能是为了速度而进行裁剪和渲染,而忽略了 alpha 缓冲区,以便能够快速绘制很多点。

如果您使用不同的渲染技术,您可以获得此效果,但它当然要慢得多。它尊重坐标之间的纵横比。

library(rgl)

sphere3d <- function(cen, r=1,n = 65, ...){
f <- function(s,t){
cbind( r * cos(t)*cos(s) + cen[1],
r * sin(s) + cen[2],
r * sin(t)*cos(s) + cen[3])
}
persp3d(f, slim = c(-pi/2,pi/2), tlim = c(0, 2*pi), n = n, add = T,axes=T,...)
}

m=20
xx=runif(m,-1,1)
yy=runif(m,-1,1)
zz=xx+2*yy+rnorm(m,mean=0,sd=0.3)

# Plotting the points:
for (i in 1:m){
cen <- c(xx[i],yy[i],zz[i])
sphere3d(cen,col="black",r=0.15,n=17)
}

# add corner points to make the bounding box span the space
sphere3d(c(-1,-1,-3),col="black",r=0.15,n=17)
sphere3d(c( 1, 1, 3),col="black",r=0.15,n=17)

# Plotting the transparent plane:
planes3d(1, 2, -1, 0, col = 'red', alpha = 0.5)

# no axes by default
axes3d( edges="bbox",box=T )

产生这个 - 但是请注意,它也不是完美的 - 当您在球体上设置透明度时也会以类似的方式搞砸。通常,您只能使用与光线追踪相关的非常慢的东西来完全正确地执行多层透明度:

enter image description here

这是另一个正面 View ,alpha 设置为 0.8。

enter image description here

关于R 透明平面 3d 不应隐藏 plot3d 点/球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42886935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com