Rgl三维网格面着色
我想在三角形RGL网格上根据顶点的接近程度为面着色 问题是,似乎很多时候顶点都与远离实际顶点位置的面相关联,这在我想给一个顶点周围的面着色时会产生问题;这些面最终离重心的实际位置很远 我现在做的是:Rgl三维网格面着色,r,colors,mesh,rgl,vcg,R,Colors,Mesh,Rgl,Vcg,我想在三角形RGL网格上根据顶点的接近程度为面着色 问题是,似乎很多时候顶点都与远离实际顶点位置的面相关联,这在我想给一个顶点周围的面着色时会产生问题;这些面最终离重心的实际位置很远 我现在做的是: 计算网格中所有面的重心 使用FAR软件包计算距离所需点最近的n个重心。保留这些索引 根据收集的索引,将这些面涂上某种颜色。其余的脸都是白色的 colors=rep('white',num_面) 颜色[彩色脸]=“红色” 网格$material=列表(颜色=颜色) 然后我将绘制网格:plot3d(网格
colors=rep('white',num_面)
颜色[彩色脸]=“红色”
网格$material=列表(颜色=颜色)
plot3d(网格)
计算质心的代码不正确。你有
#Function for computing the barycenter/centroid of a face.
compute_face_centroid=function(vertices,face){
vertex=vertices[,face][-4,]
centroid=apply(X=vertex,MARGIN = 1,FUN = mean)
return(centroid)
}
这只是删除了顶点
数组的第4行,这是将齐次坐标转换为欧几里德坐标的错误方法。你真的需要把其他行除以第四行。您可以使用rgl
功能asEuclidean
:
#Function for computing the barycenter/centroid of a face.
compute_face_centroid=function(vertices,face){
vertex <- asEuclidean(t(vertices[,face]))
apply(vertex, MARGIN = 2, FUN = mean)
}
这些细长三角形的质心距离选定点很远
如果您发布一个小的可复制示例,这将非常有用。我们不知道您从什么数据开始,因此很难告诉您如何处理这些数据。这个例子不需要足够完整,就可以复制你的样本图形,只是一些结构相同的东西。您好,非常感谢您帮助我研究这个问题!如果没有你的帮助,我是不会明白的。最后,你可能知道新的着色方案是如何工作的吗?我已经下载了新版本的rgl;我会指定'meshcolor'=顶点/面/边,并在'color'=颜色中为每个顶点/边/面索引包含一种颜色吗?再次非常感谢您,如果有什么我可以帮忙的,请告诉我是否可以帮忙!是的,没错。对于您的问题,我建议查找
n
最近的顶点,而不是质心meshColor=“vertices”
是默认值,但如果默认值在发布时发生更改,则明确指定该值可能是最安全的。
wire3d(file)