三角形多边形的最大中位数的有效方法

目的

我有一汤三角形多边形。我想检索每个三角形的最大中位数作为向量。

工作状态

起点:

  • 点数组 (n,3),例如 [x,y,z]

  • 引用上述点数组的三角形点索引数组 (n, 3),例如 [[0,1,2],[2,3,4]...]

我将两个包含真实3D点坐标的单个矩阵组合在一起。然后我计算中位数向量及其长度。

/编辑:我将代码更新为我的当前版本

def calcMedians(polygon):

    # C -> AB = C-(A + 0.5(B-A))

    # B -> AC = B - (A + 0.5(C-A))

    # A -> BC = A - (B

    dim = np.shape(polygon)


    medians = np.zeros((dim[0],3,2,dim[1]))


    medians[:,0,0] = polygon[:,2]

    medians[:,0,1] = polygon[:,0] + 0.5*(polygon[:,1]-polygon[:,0]) 

    medians[:,1,0] = polygon[:,1]

    medians[:,1,1] = polygon[:,0] + 0.5*(polygon[:,2]-polygon[:,0])

    medians[:,2,0] = polygon[:,0]

    medians[:,2,1] = polygon[:,1] + 0.5*(polygon[:,2]-polygon[:,1])


    m1 = np.linalg.norm(medians[:,0,0]-medians[:,0,1],axis=1)

    m2 = np.linalg.norm(medians[:,1,0]-medians[:,1,1],axis=1)

    m3 = np.linalg.norm(medians[:,2,0]-medians[:,2,1],axis=1)


    medianlengths = np.vstack((m1,m2,m3)).T

    maxlengths = np.argmax(medianlengths,axis=1)


    final = np.zeros((dim[0],2,dim[1]))

    dim = np.shape(medians)

    for i in range(0,dim[0]):

        idx = maxlengths[i]

        final[i] = medians[i,idx]




    return final

现在,我首先使用空矩阵创建最终的中值向量矩阵。长度使用np.linalg.norm计算并收集在矩阵中。对于此矩阵,argmax 方法用于识别目标中值向量。


问题


Old:但是,我对维度感到困惑,目前无法使其工作或了解结果是否正确。有人知道如何正确地做到这一点和/或这种方法是否有效?


我的目标是以[n_polygons,3(由于3个中位数),2(起点和终点),3(xyz)]的形式构造3个中位数。


使用最大长度信息,我想将其简化为[n_polygons,2(起点和终点),3(xyz)]


在函数中使用这个临时的 for 循环,我可以创建输出。但是必须有一个更“干净”的矩阵方法。使用中位数[:,最大长度,:,:]会导致形状为[4,n_polygons,2,3]而不是[n_polygons,2,3],我不明白为什么。


两个三角形的中位数的示例图像:

http://img3.mukewang.com/62e8da9800017fcc05580406.jpg

不幸的是,我没有一个大型的示例性数据集,但我想这可以很快生成。上图中的示例数据集是:

polygons = np.array([[0,1,2],[0,3,2]])
points = np.array([[0,0],
          [1,0],
          [1,1],
          [0,1]])
polygons3d = points[polygons[:,:]]


拉莫斯之舞
浏览 105回答 1
1回答

慕桂英3389331

最长的中位数表示最短的三角形边。查看此处,将中位数长度公式重写为M[i] = Sqrt(2(a^2+b^2+c^2)-3*side[i]^2) / 2因此,您可以仅使用边长来简化计算(也许您已经拥有它们)关于 3D 坐标 - 只需在不垂直于点平面的任何坐标平面上使用投影 - 忽略一个维度(选择具有最低值范围的维度)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python