目的
我有一汤三角形多边形。我想检索每个三角形的最大中位数作为向量。
工作状态
起点:
点数组 (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],我不明白为什么。
两个三角形的中位数的示例图像:
不幸的是,我没有一个大型的示例性数据集,但我想这可以很快生成。上图中的示例数据集是:
polygons = np.array([[0,1,2],[0,3,2]]) points = np.array([[0,0], [1,0], [1,1], [0,1]]) polygons3d = points[polygons[:,:]]
慕桂英3389331
相关分类