首先让我来定义我的问题,
我正在研究室内导航问题。所以我构建了一个图形来模拟可能的路径。我可以轻松地用Dijkstra计算最短路径并将其绘制在地图上。到目前为止,非常好。
但这还不够,
我需要指导用户导航他。
例如:
"Turn Right"
"Turn Left"
"Go on from the left"
要提供这些指示,我需要知道哪条路径在左边,哪条路径在右边。
以下是我要解决的问题:
1. A undirected weighted graph
2. The shortest path which contains vertices and edges
3. X and Y Coordinates of each vertices
顺便说一下,我将使用信标技术在.Net中这样做。
您知道如何分隔左右边缘,以便向用户发送方向消息吗?
感谢。
答案 0 :(得分:0)
我能想到的最简单的方法是采用向量的叉积来表示玩家面向/旅行的方向,以及向量表示玩家想要进入的方向。玩家是否必须左转或右转取决于关于结果的Y坐标是正还是负,但这取决于坐标系的手性。我会选择一个并尝试一下。你有50%是正确的,如果你错了就很容易逆转。
修改强>
当 a 位于 b 的右侧时,我们看到 a×b 指向上方。但是,我们也看到 -a×b 指向向下。因此,如果 a 指向相反的方向 - 左侧 - 则交叉产品会指向下方。
答案 1 :(得分:0)
点积方法不适用于二维。对于这种情况,您想使用矩阵 [A B] 行列式的符号,其中 A 和 B 是您的列向量。一个伪代码是
c=sign(det([A B]))
这里,如果 c>0 表示 B 在左边。这将根据矩阵中 A 和 B 的顺序进行切换。