我有一组三维分散的数据点。我正在寻找方法来寻找满足一些约束条件的路径,尽可能多。
来自scikit的NearestNeighbors似乎适合生成一个可以逐点查询最近邻居的树。
Q1:如何在欧几里得意义上包含一个接近度的加权方案,以及从$ p_ {n} $到$ p_的路径向量的意义上的接近度{n + 1} $与平面上的法向量接近平行?这是为了使路径远离平面移动的点的优先级。我知道我将使用的计算来测试向量的接近程度,但是我不知道如何将结果与欧几里德距离一起包括在内。
Q2:是否有一种简单的方法可以让$ p_ {0} $始终位于平面上?
基本算法
对这个想法的任何想法?
答案 0 :(得分:1)
这听起来像图算法案例。
似乎解决它的方法是创建有向图,其中节点是您拥有的点,并且对于每个节点,取M最近(选择您自己的)邻居并从节点创建边到邻居,边缘的重量应该是你所有喜好的组合。
例如,重量可以是:
|| Vi-Vj ||^2 * k
w=-----------------
(Vj-Vi)N
其中Vi是当前节点,Vj是下一个节点。 k是最近邻居列表中的顺序(从1开始)。 N是平面法线。
这个想法是高欧氏距离增加了一个惩罚,一个不是最近的节点也增加了惩罚,如果方向不垂直于平面,分母中的点积会增加一个惩罚。
显然,这只是一个例子,应该根据您的需要进行调整。
当你有一个准备好的图表时,你可以在它上面运行路径查找算法(例如Dijkstra,Floyd等)
当您选择路径并希望影响下一个路径的选择时,您可以获取所有使用的节点,并增加通向这些节点的所有边的权重。