我在曲面上有一些点(我没有数学公式)。你知道吗
我有一个算法,可以给我曲面的法向量(实际上,它和给我点的是同一个),但是,不幸的是,法向量没有“对齐”。你知道吗
我的意思是,返回法向量n
的算法任意返回n
或-n
。没有办法说,先验的,我已经收到了。这不一定是个问题,但我的向量场图看起来很糟糕,因为两个相邻的点可能有指向相反方向的向量。因此,我想“对齐”我的法向量,在某种意义上,我想让它们中的大多数都反映出物体的相同方向(即指向“向外”的所有点或指向“向内”的所有点)
我意识到这不可能有完美的公式,但我有一个困难的时间开发一个算法,即使是半途而废的工作。你知道吗
我当前的算法取当前点最近的k
点,确定当前法向量与这些k
点的法向量对齐的程度(通过点积),求平均值,如果它与相邻点“不对齐”,则翻转向量。我将这个过程迭代了几次,以允许不同点的邻域之间的交互。你知道吗
以下是迄今为止的代码:
import sklearn.neighbors
import numpy as np
def align_normals(data, normals, k=10, iterations=10):
balltree = sklearn.neighbors.BallTree(data)
pairwise_nearest_indices = balltree.query(data,k=k,sort_results=True,return_distance=False)
for iteration in range(iterations):
alignments = []
for index in range(1,pairwise_nearest_indices.shape[1]):
alignment = np.einsum("ij,ij->i",normals,normals[pairwise_nearest_indices[:,index]])
alignments.append(alignment)
alignment = np.average(alignments, axis=0)
wrong_alignment = np.sign(alignment)
normals = normals*wrong_alignment.reshape(-1,1)
return normals
我突然想到,曲面“末端”的点可以很容易地对齐,指向外部,然后迭代地对齐这些点附近的向量。然而,到目前为止,我所有的想法似乎都是一派胡言。你知道吗
有没有人对对齐法向量有什么好主意?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐