R:使用 RGL 在两个 3d 点之间绘制弧线

R: Plotting arc between two 3d points with RGL

我使用 rgl 创建了一个 rgl.spheres() 的 3d 球体,并在球体表面绘制了两个点。有谁知道如何在这两点之间画弧线?

您必须计算沿弧的点,然后使用 lines3d 绘制曲线。您可能想将圆弧向外移动一点 如果它们相交,避免问题的领域:两者都不是真正的 球形,所以交叉点可能看起来很难看。

例如,

r <- 1.3
center <- matrix(1:3, ncol=3)
library(rgl)
open3d()
spheres3d(center, radius = r, col = "white")
# A couple of random points
pts <- matrix(rnorm(6, mean=c(center, center)), ncol = 3)
# Set the radius to 1.001*r
setlen <- function(pt) {
  center + 1.001*r*(pt - center)/sqrt(sum((pt - center)^2))
}
pts <- t(apply(pts, 1, setlen))
points3d(pts, col = "black")

# Now draw the arc
n <- 20
frac <- seq(0, 1, len = n)
arc <- matrix(0, ncol = 3, nrow = n)
for (i in seq_along(frac)) {
  # First a segment
  arc[i,] <- frac[i]*pts[1,] + (1-frac[i])*pts[2,]
  # Now set the radius
  arc[i,] <- setlen(arc[i,])
}
lines3d(arc, col = "red")

这会产生

编辑添加:

最新版本的 rgl(0.100.5,目前仅在 R-forge 上可用)具有新功能 arc3d。使用该版本,绘制图像的代码可以简化为

library(rgl)
open3d()
spheres3d(center, radius = r, col = "white")
points3d(pts, col = "black")
arc3d(pts[1,], pts[2,], center, col = "red")

如果这些点与 center 的距离不同,它将加入它们 使用对数螺线而不是圆弧的弧。