以下解决方案并不完美,但如果您有 Matlab 的副本,则可以使用。
library(rgl)
library(geometry)
# Read in data - also at: http://pastebin.com/R2p4Cf7d
simDat <- read.csv("testDat.csv")
#
x <- simDat[,1];y<-simDat[,2];z<-simDat[,3]
xyz <- cbind(simDat[,1],simDat[,2],simDat[,3])
#
triNodes <- delaunayn(xyz)
tbr1 <- t(surf.tri(xyz, triNodes ))
# Plot data from R generated triangles
open3d()
rgl.triangles(xyz[tbr1,1], xyz[tbr1,2], xyz[tbr1,3])
#
# Import data generated by Matlab function delaunay()
# - also at: http://pastebin.com/vQV2Zaii
nodeDat_ML <- read.csv("testDatNodes.csv")
triNodes2 <- cbind(nodeDat_ML[,1], nodeDat_ML[,2], nodeDat_ML[,3],1)
#
tbr2 <- t(surf.tri(xyz, triNodes2))
# Plot data from Matlab generated triangles
open3d()
rgl.triangles(xyz[tbr2,1], xyz[tbr2,2], xyz[tbr2,3])
该代码产生以下两个表面。左图基于 R 函数 delaunayn() 生成的三角剖分,右图基于 Matlab 函数 delaunay() 生成的三角剖分。
Matlab 生成的数据可在以下网址获得:http: //pastebin.com/vQV2Zaii
相关的 Matblab 代码是:
fname = 'testDat.csv';
tt = table2array(readtable(fname)); % get data
x = tt(:,1);y = tt(:,2);z = tt(:,3);
tri = delaunay(x,y); % the triangulation data
trisurf(tri,x(:,1),y(:,1),z(:,1)); % surface plot
结果并不完全完美,因为最终图(右)有一个虚假的三角形。
我希望以上内容对遇到类似问题的人有用。