Rgl三维网格面着色

Rgl三维网格面着色,r,colors,mesh,rgl,vcg,R,Colors,Mesh,Rgl,Vcg,我想在三角形RGL网格上根据顶点的接近程度为面着色 问题是,似乎很多时候顶点都与远离实际顶点位置的面相关联,这在我想给一个顶点周围的面着色时会产生问题;这些面最终离重心的实际位置很远 我现在做的是: 计算网格中所有面的重心 使用FAR软件包计算距离所需点最近的n个重心。保留这些索引 根据收集的索引,将这些面涂上某种颜色。其余的脸都是白色的 colors=rep('white',num_面) 颜色[彩色脸]=“红色” 网格$material=列表(颜色=颜色) 然后我将绘制网格:plot3d(网格

我想在三角形RGL网格上根据顶点的接近程度为面着色

问题是,似乎很多时候顶点都与远离实际顶点位置的面相关联,这在我想给一个顶点周围的面着色时会产生问题;这些面最终离重心的实际位置很远

我现在做的是:

  • 计算网格中所有面的重心

  • 使用FAR软件包计算距离所需点最近的n个重心。保留这些索引

  • 根据收集的索引,将这些面涂上某种颜色。其余的脸都是白色的

    colors=rep('white',num_面)
    颜色[彩色脸]=“红色”
    网格$material=列表(颜色=颜色)

  • 然后我将绘制网格:
    plot3d(网格)
  • 问题是,我现在得到了非常奇怪的颜色,有没有任何既定的方法来给接近某个坐标/顶点的面着色
  • 这就是网格当前的样子,红色作为“彩色”面,蓝色作为点,我希望附近有一个彩色面

    更新:现在,我的问题已修改为:

    如何找到离给定点最近的面?我仍然不清楚,因为面重心有时会产生误导,并且不代表到给定顶点的实际距离

    更新2

    我在这里添加了示例代码和文件:

    基本上,代码使用最近邻算法查找到同一3d网格的给定顶点的最近面,然后我们在颜色向量中为这些面着色(记住为颜色着色4次):

    除此之外,当我们运行此算法时,我们只对形状的一侧着色:如下图所示:

    如何使颜色更加对称

    更新3:此问题已解决!请查看Rforge上未发布的rgl版本,了解允许面、顶点和边着色的最新版本rgl

    更新4:以下是通过对最近的顶点着色的新图像(以显示新rgl包的奇妙效果):


    计算质心的代码不正确。你有

    #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)