我有兩個 3D 點:
t0: [5,1,8], t200: [100,20,10]
我必須找到 t0 和 t200 之間的線以及包含在 t0 和 t200 之間的所有 3D 點 (x,y,z)。最后,繪制它并創建一個像這樣的資料框:
x y z
t0 5 1 9
t1
...
t200 100 20 10
任何提示?
最好的祝福
uj5u.com熱心網友回復:
使用mapply和快速seq.int。
mapply(\(x, y) seq.int(x, y, length.out=201), t0, t200)
和資料框:
res <- mapply(\(x, y) seq.int(x, y, length.out=201), t0, t200) |>
`dimnames<-`(list(paste0('t', 0:200), letters[24:26])) |>
as.data.frame()
head(res)
# x y z
# t0 5.000 1.000 0.00
# t1 5.475 1.095 0.05
# t2 5.950 1.190 0.10
# t3 6.425 1.285 0.15
# t4 6.900 1.380 0.20
# t5 7.375 1.475 0.25
tail(res)
# x y z
# t195 97.625 19.525 9.75
# t196 98.100 19.620 9.80
# t197 98.575 19.715 9.85
# t198 99.050 19.810 9.90
# t199 99.525 19.905 9.95
# t200 100.000 20.000 10.00
注: R >= 4.1
資料:
t0 <- c(5, 1, 0)
t200 <- c(100, 20, 10)
uj5u.com熱心網友回復:
假設你想要一個介于 t0 和 t200 之間的向量,你可以使用seq相同的n
start <- c(5, 1, 9)
end <- c(100, 20, 10)
n <- 201
sapply(1:3, \(i) seq(start[i], end[i], length = n))
更快的方法是反轉歸一化公式 x_norm = (x - x_min) / (x_max - x_min) <=> x = x_norm * (x_max - x_min) x_min
x_i <- seq(0, 1, length = n)
sapply(1:3, \(i)x_i * (end[i] - start[i]) start[i])
all.equal(sapply(1:3, \(i) seq(start[i], end[i], length = n)),
sapply(1:3, \(i)x_i * (end[i] - start[i]) start[i]))
[1] TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394827.html
標籤:r
上一篇:根據每周日期列,每年拆分行
