Algorithm 如何有效地优化二维路径中的坐标数?

Algorithm 如何有效地优化二维路径中的坐标数?,algorithm,optimization,game-development,Algorithm,Optimization,Game Development,我在2D环境中使用大量坐标。坐标为路径建模 下面是一个例子: path = [(0,0), (1,0), (2,0), (3,0), (3,1), (3,2), (2,2), (1,2), (0,2)] 我希望通过删除冗余坐标来优化此路径。通常情况下,坐标沿X轴或Y轴上的直线移动。因此,可以从路径中删除“角”坐标之间的所有点 此路径与上面的路径相同: path = [(0,0), (3,0), (3,2), (0,2)] 下面的图片描述了所需的优化: 坐标将始终在其中一个轴上直线对齐。对角

我在2D环境中使用大量坐标。坐标为路径建模

下面是一个例子:

path = [(0,0), (1,0), (2,0), (3,0), (3,1), (3,2), (2,2), (1,2), (0,2)]
我希望通过删除冗余坐标来优化此路径。通常情况下,坐标沿X轴或Y轴上的直线移动。因此,可以从路径中删除“角”坐标之间的所有点

此路径与上面的路径相同:

path = [(0,0), (3,0), (3,2), (0,2)]
下面的图片描述了所需的优化:

坐标将始终在其中一个轴上直线对齐。对角线可以忽略

如果有人能给我一个提示,告诉我如何以一种有效的方式实现这一点,那就太好了。由于路径是按程序生成的,因此我需要多次运行优化算法。

该算法在许多情况下适用于减少沿
2D
路线的点数

python中的示例:

#  pip install rdp

from rdp import rdp

path = [[0,0], [1,0], [2,0], [3,0], [3,1], [3,2], [2,2], [1,2], [0,2]]

rdp(path)

#  output: [[0, 0], [3, 0], [3, 2], [0, 2]]

因此,我提出了以下解决方案:每次向路径添加一个新点时,我都会检查X或Y值是否等于前面两个点的值。如果这是真的,我可以删除中间的3点之一

private void redundancy检查()
{
如果(此点长度<3)
{
返回;
}
var last=this.Points[this.Points.Length-1];
var secondLast=this.Points[this.Points.Length-2];
var thirdLast=this.Points[this.Points.Length-3];
if((last.x==secondLast.x&&last.x==thirdLast.x)
||(last.y==secondLast.y&&last.y==thirdLast.y))
{
移除点(此点长度为-2);
}
}

这个算法似乎运行得相当快,我能够将坐标数量从~450'000减少到~3300。(当然这取决于坐标)

这与在排序数组中删除重复项基本相同。除了删除所有重复项之外,您希望每个项目不超过2项。谢谢您的回答。然而,这个算法是相当资源密集型的,最坏情况下的复杂度为O(n^2),对我的情况没有用处。