我难以理解绘制由两个向量(x0,x1)跨越一个给定点(O = origin)的平面所需的rgl::plane3d
参数)。这是用于解释投影的图。
rgl文档没有提供足够的示例供我理解要指定的内容。
这是我的MWE:
library(matlib)
library(rgl)
rgl::open3d()
O <- c(0, 0, 0)
x0 <- c(1, 1, 1)
x1 <- c(0, 1, 1)
y <- c(1, 1, 3)
XX <- rbind(x0=x0, x1=x1)
matlib::vectors3d(XX, lwd=2)
matlib::vectors3d(y, labels=c("", "y"), color="red", lwd=3)
# how to specify the plane spanned by x0, x1 ???
# planes3d(..., col="gray", alpha=0.2)
# draw projection of y on plane of XX
py <- matlib::Proj(y, t(XX))
rgl::segments3d(rbind( y, py))
rgl::segments3d(rbind( O, py))
要找到与x0和x1都平行的平面,找到这两个向量的叉积,我们可以手动完成,因为它是R:
library(pracma)
cross(x1,x2)
[1] 0 -1 1
因此,垂直于此平面的等式基本上是任何矢量,其点积将为0,意味着:
0*x + -1*y + 1*z = 0
-y + z = 0
您可以阅读有关说明here的更多信息。或者在您的方案中,您可以认为它需要y = z平面(因为x不同)。
因此,如果您查看文档,它会说:
“ planes3d”和“ rgl.planes”使用参数化绘制平面a x + b y + c z + d = 0。
我们没有偏移量,所以d = 0,这给我们留下a = 0,b = -1和c = 1:
plot3d(rbind(0,x1),type="l",xlim=c(0,3),ylim=c(0,3),
zlim=c(0,3),xlab="x",ylab="y",zlab="z")
lines3d(rbind(0,y),col="red")
lines3d(rbind(0,x0))
py <- matlib::Proj(y, t(XX))
segments3d(rbind( y, py),col="gray")
segments3d(rbind( O, py),col="gray")
planes3d(a=0,b=-1,c=1,col="turquoise",alpha=0.2)