【问题标题】:Plot simplices in 3D in R在 R 中以 3D 形式绘制单纯形
【发布时间】:2021-04-24 06:41:44
【问题描述】:

我有一个点列表和一个单纯形列表。我想在给定顶点的情况下以 3D 绘制单纯形。本质上,我正在寻找 3D 中的 segment() 等价物。

例子

Pts<-matrix(c(0,0,0,1,0,0,0,1,0,0,0,1),ncol =3,byrow=TRUE)
Simplex<-c(1,2,3,4)

所以,我正在寻找一种输入 Pts 和 Simplex 并获得四面体图的方法。

我已经尝试过搜索,但到目前为止,唯一的可能性似乎是写出线性空间的函数并绘制它们。任何提示将不胜感激。

【问题讨论】:

  • 什么是nock=3?你的意思是ncol=3?您能否提供一个代表您想要的示例图像(如果可能)?我对单纯形的术语不太熟悉。
  • @thelatemail 3D 中的单纯形只不过是一个四面体。
  • @StéphaneLaurent - 很酷,谢谢,这不是我以前听过的术语。顺便说一句,答案很好。
  • @thelatemail 是的,这是 iPhone 引入的错字。感谢您指出。小维单纯形的名称是:0-单纯形是点,1-单纯形是线段,2-单纯形是三角形,3-单纯形是四面体,4-单纯形是 5-细胞. en.m.wikipedia.org/wiki/Simplex

标签: r plot3d


【解决方案1】:

使用 'rgl' 包:

library(rgl)

vertices <- rbind(
  c(0, 0, 0),
  c(1, 0, 0),
  c(0, 1, 0),
  c(0, 0, 1)
)

faces <- combn(4,3)
for(f in 1:4){
  triangles3d(rbind(
    vertices[faces[1,f],],
    vertices[faces[2,f],],
    vertices[faces[3,f],]
  ), color="red", alpha=0.4)
}

您可以添加边和顶点:​​

# add edges as thin cylinders
edges <- combn(4, 2)
for(e in 1:6){
  shade3d(cylinder3d(rbind(vertices[edges[1,e],],vertices[edges[2,e],]), 
                     radius = 0.02, sides = 30), col="yellow")
}
# add vertices as small spheres
spheres3d(vertices, radius= 0.03, color = "yellow")

【讨论】:

    【解决方案2】:

    没有那么漂亮或灵活,但这是一个基本的 R 版本,使用 perspsegments 来取乐:

    ## empty perspective plot
    tm <- persp(matrix(rep(0,4), nrow=2),
                xlim=c(-1,1), ylim=c(-1,1), zlim=c(-1,1),
                col="#00000000", border=NA, theta=30, phi=50, xlab="x")
    
    ## project points into 3d space
    tpts <- data.frame(trans3d(pmat=tm, x=Pts[,1], y=Pts[,2], z=Pts[,3]))
    
    ## draw each segment
    sgs <- combn(seq_len(nrow(tpts)), 2,
                 FUN=function(r) unlist(tpts[r,]), simplify=FALSE)
    lapply(sgs, function(x) segments(x[1], x[3], x[2], x[4], col="red"))
    

    【讨论】:

    • 上一个答案对我来说更相关,但这也非常有用。谢谢!
    猜你喜欢
    • 2016-06-22
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多