如何知道右侧是否有矢量

时间:2016-02-05 15:07:07

标签: asp.net math vector graph-theory indoor-positioning-system

首先让我来定义我的问题,

我正在研究室内导航问题。所以我构建了一个图形来模拟可能的路径。我可以轻松地用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中这样做。

您知道如何分隔左右边缘,以便向用户发送方向消息吗?

感谢。

2 个答案:

答案 0 :(得分:0)

我能想到的最简单的方法是采用向量的叉积来表示玩家面向/旅行的方向,以及向量表示玩家想要进入的方向。玩家是否必须左转或右转取决于关于结果的Y坐标是正还是负,但这取决于坐标系的手性。我会选择一个并尝试一下。你有50%是正确的,如果你错了就很容易逆转。

修改

cross product image

a 位于 b 的右侧时,我们看到 a×b 指向上方。但是,我们也看到 -a×b 指向向下。因此,如果 a 指向相反的方向 - 左侧 - 则交叉产品会指向下方。

答案 1 :(得分:0)

点积方法不适用于二维。对于这种情况,您想使用矩阵 [A B] 行列式的符号,其中 A 和 B 是您的列向量。一个伪代码是

c=sign(det([A B]))

这里,如果 c>0 表示 B 在左边。这将根据矩阵中 A 和 B 的顺序进行切换。