我有一套3D物體。每個物體由8個點定義,每個點有三個座標。所有的身體都是立方體或近似立方體的。我想用系統化的點柵格「填充」立方體。座標存儲在簡單的data.frames中。用系統化的點光柵填充3D物體
我開發了以下代碼,做什麼,我想爲立方形機構:
# libraries
library(rgl)
# define example cube with 8 points
excube <- data.frame(
x = c(1,1,1,1,5,5,5,5),
y = c(1,1,4,4,1,1,4,4),
z = c(4,8,4,8,4,8,4,8)
)
# cubeconst: fill cube (defined by 8 corner points) with a 3D-point-raster
cubeconst <- function(x, y, z, res) {
cube <- data.frame()
xvec = seq(min(x), max(x), res)
yvec = seq(min(y), max(y), res)
zvec = seq(min(z), max(z), res)
for (xpoint in 1:length(xvec)) {
for (ypoint in 1:length(yvec)) {
for (zpoint in 1:length(zvec)) {
cube <- rbind(cube, c(xvec[xpoint], yvec[ypoint], zvec[zpoint]))
}
}
}
colnames(cube) <- c("x", "y", "z")
return(cube)
}
# apply cubeconst to excube
fcube <- cubeconst(x = excube$x, y = excube$y, z = excube$z, res = 0.5)
# plot result
plot3d(
fcube$x,
fcube$y,
fcube$z,
type = "p",
xlab = "x",
ylab = "y",
zlab = "z"
)
現在我正在尋找一個解決方案,以「補」大約立方形機構例如像了以下機身:
# badcube
badcube <- data.frame(
x = c(1,1,1,1,5,5,5,5),
y = c(1,1,4,4,1,1,4,4),
z = c(4,10,4,12,4,8,4,8)
)
# plot badcube
plot3d(
badcube$x,
badcube$y,
badcube$z,
col = "red",
size = 10,
type = "p",
xlab = "x",
ylab = "y",
zlab = "z"
)
也許你可以指點我正確的方向。
請您詳細說明您的「系統點柵格」是什麼意思?我把你的問題看成是問如何將一個扭曲的立方體分成N×N×N個較小的立方體。它是否正確? – Bill
@Bill是的,我想你明白了。算法的結果應該是扭曲立方體限制範圍內的點列表。這些點可以是隨機分佈的,但我更喜歡它們是等距離的。將NxNxN分成更小的立方體可能是實現這一目標的一種方法。但是如何? – nevrome