Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rgl:绘制由两个三维矢量跨越的平面_R_Projection_Rgl_Plane - Fatal编程技术网

rgl:绘制由两个三维矢量跨越的平面

rgl:绘制由两个三维矢量跨越的平面,r,projection,rgl,plane,R,Projection,Rgl,Plane,我无法理解绘制两个向量(x0,x1)穿过给定点(O=原点)的平面所需的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) mat

我无法理解绘制两个向量(x0x1)穿过给定点(O=原点)的平面所需的
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))
库(matlib)
图书馆(rgl)
rgl::open3d()

O要找到平行于x0和x1的平面,找到这两个向量的叉积,我们可以手动进行,因为它是R:

library(pracma)
cross(x1,x2)
[1]  0 -1  1
垂直于此的平面方程基本上是任何向量,其点积为0,这意味着:

0*x + -1*y + 1*z = 0
-y + z = 0
你可以阅读更多关于解释的内容。或者在您的场景中,您可以将其视为需要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)
plot3d(rbind(0,x1),type=“l”,xlim=c(0,3),ylim=c(0,3),
zlim=c(0,3),xlab=“x”,ylab=“y”,zlab=“z”)
第3d行(rbind(0,y),col=“红色”)
线3d(rbind(0,x0))

py为了找到平行于x0和x1的平面,找到这两个向量的叉积,我们可以手动进行,因为它是R:

library(pracma)
cross(x1,x2)
[1]  0 -1  1
垂直于此的平面方程基本上是任何向量,其点积为0,这意味着:

0*x + -1*y + 1*z = 0
-y + z = 0
你可以阅读更多关于解释的内容。或者在您的场景中,您可以将其视为需要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)
plot3d(rbind(0,x1),type=“l”,xlim=c(0,3),ylim=c(0,3),
zlim=c(0,3),xlab=“x”,ylab=“y”,zlab=“z”)
第3d行(rbind(0,y),col=“红色”)
线3d(rbind(0,x0))

详细的解释很有帮助。然而,我现在看到,平面可以简单地指定为
plane3d(交叉(x0,x1),col=…)
yes没错。。抱歉,我刚刚意识到有点啰嗦…有没有办法将其扩展到矩形的交点,而不是平面与rgl对象的交点?我这样问是因为与平面相交,比如与
mesheR
,会返回点,但如果需要点和边,详细的解释会很有帮助。然而,我现在看到,平面可以简单地指定为
plane3d(交叉(x0,x1),col=…)
yes没错。。抱歉,我刚刚意识到有点啰嗦…有没有办法将其扩展到矩形的交点,而不是平面与rgl对象的交点?我这样问是因为与平面相交,比如说与
mesheR
,会返回点,但如果需要点和边。。。