绘制表面并在其上创建热图

Plot a surface and create a heatmap on it

我需要使用 R 在 3 维绘图​​中表示一个表面。

我有一个矩阵 "nodes" (Nx3) 每行都有 N 个点中每个点的 x、y、z 坐标和一个矩阵 "triangles" (Mx3) 每行有作为三角形顶点的 3 个点的索引。

目前我只能使用 rgl 绘制点

plot3d(nodes)

所以我想做的是表示这个表面,我知道在 Matlab 中有一些不错的函数,但我在 R 中找不到任何等效函数!

然后我的目标是在三角表面上绘制热图或颜色图,例如给定每个节点的某个函数的值

我从 那里窃取了这段代码,并根据您的目的对其进行了调整。我将三角形称为 T 和 _T。每个三角形由三个坐标组成,(x1,y1,z1)、(x2,y2,z2) 和 (x3,y3,z3),每个三角形都有一个与其颜色对应的数字 c。此示例仅绘制两个三角形。在 mymesh 结构中,三角形存储为 (x1,_x1,y1,_y1,z1,_z1,...,z3,_z3,c,_c)。维度是2x10,因为有两个三角形,一个三角形用10个数字表示,9个坐标,1个颜色。

mymesh <- structure(c(0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,100,200),
                    .Dim = c(2, 10),
                    .Dimnames = list( NULL, c("x1", "y1", "z1",
                                              "x2", "y2", "z2",
                                              "x3", "y3", "z3",
                                              "value")
                    )
)

library(rgl)
rgl.open()
i <- 1
vertices <- c(mymesh[i,1:3],1,mymesh[i,4:6],1,mymesh[i,7:9],1)
indices <- c( 1, 2, 3)
shade3d( tmesh3d(vertices,indices) , col=1)
bg3d(color = "white")
for(i in 2:2){
  vertices <- c(mymesh[i,1:3],1,mymesh[i,4:6],1,mymesh[i,7:9],1)
  indices <- c( 1, 2, 3)
  shade3d( tmesh3d(vertices,indices) , col= i)
}

输出为

可能有更好的方法。我真的不知道 R,坐标似乎以一种愚蠢的方式存储,因为 R 使用 column major order. 您可以更改它,以便以更自然的方式输入坐标,即 (x1,y1,z1,x2,..._y3,_z3,_c) 然后将其转置传递给结构。