我需要使用R
在三维图中表示一个表面我有一个矩阵“节点”(Nx3),每行有N个点中每个点的x,y,z坐标和一个矩阵“三角形”(Mx3),每行有3个点的索引是三角形的顶点。
目前我只能使用rgl
绘制点数plot3d(nodes)
所以我想要做的是表示这个表面,我知道在Matlab中有一些很好的功能,但是我在R中找不到任何等价物!
然后我的目标是在三角形表面上绘制热图或色图,例如给定每个节点处某个函数的值
答案 0 :(得分:1)
我从here偷了这个代码,然后根据你的目的调整它。我称之为三角形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个数字表示,九个用于坐标,一个用于颜色。
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)
然后将其转置到结构中。