library("onion")
library("rgl")
#bunny data
data(bunny)
#cone
pts <- cbind(c(0, 0), c(0, 0.23), c(0, 0))# the centers
radii <- c(0.0, 0.15)
cone <- cylinder3d(pts, radii, sides = 20)
#visualize
points3d(bunny, col="pink", alpha = 0.3)
shade3d(cone, col = "lightblue", alpha = 0.9)
这更像是一个几何问题,而不是一个编程问题。对于 x、y、z 空间中的任何给定点,
x^2 + z^2 < (0.15/0.23 * y)^2
所在的点将位于您定义的圆锥体内,因此您可以执行以下操作:
data(bunny)
pts <- cbind(c(0, 0), c(0, 0.23), c(0, 0))
radii <- c(0.0, 0.15)
cone <- cylinder3d(pts, radii, sides = 100)
cone_bunny <- bunny[bunny[,1]^2 + bunny[,3]^2 < (0.15/0.23 * bunny[,2])^2,]
points3d(cone_bunny, col="pink", alpha = 0.5)
shade3d(cone, col = "lightblue", alpha = 0.3)
我不确定您是否正在寻找一种更通用的相交 3D 形状解决方案 - 这要困难得多,但许多简单的几何相交可以通过简单的代数来计算。