对于2D图形,有两点, A 和 B ,以及矩形集(R 0 < / sub>,..,R k-1 )。
开始条件:
我必须开发一种构建爬楼梯(或阶梯函数)线的算法。
该行必须满足这些限制:
我读过一些关于计算几何的书,但没有找到解决这个问题的算法。
答案 0 :(得分:0)
考虑以下情况:
+----+ B
| |
| |
+----+ +-------+
| |
+---+ | |
| | | |
+---+ +-------+
A
沿着矩形总是有一条最小的路径。边缘。在最优解决方案中,您可以始终将线段更远地推到传递的中心而不更改路径长度,因为推送的线段之前的线段将在推线段之后被线段的负值更改。 / p>
因此,为了运行A *,您可以生成一个网格,其顶点位于行或列的交叉点上。角落,加上A和B:
o-oo-oo---o----o--o
| || | | |
| || | | |
o-oo-oo---o----o--o
| || || | |
o-oo-oo---o o o
| | | | |
o-oo-oo---o----o--o
| || || | | |
o-oo-oo---o----o--o
您甚至可以删除位于矩形内的顶点。使用曼哈顿距离在该网格上运行A *。为了减少扭结,你可能会引入人为惩罚。即当你从一个顶点前进到另一个顶点而不是你来自另一个顶点时,添加一个非常小的惩罚(例如0.01)。这允许您包括扭结最小化而不改变路径长度的惩罚(对于足够小的扭结惩罚)。