如何从位置和地标获得(X,Y)向量

时间:2016-01-29 14:56:14

标签: c++ algorithm geometry

我目前在地图中有一个代理,其位置称为myPos=(myX,myY),但其方向myOri=(oriX,oriY)未知。我还在位置lm=(lmX,lmY)看到了一个地标,我从我的视角到地标都有笛卡尔坐标和极坐标,分别为relLM=(relX,relY)polLM=(r,theta)

我的目标是找到我的方向向量与X和Y轴的关系,如XX=(xX, xY)YY=(yX, yY)。假设以下示例X向右增长,Y向上增长,0旋转的代理遵循X轴(因此看起来正确的代理具有XX=(1,0)YY=(0,1)intuition开始,其中0角度旋转在X轴上,PI / 2旋转在Y上,PI在-X上,3PI / 2在-Y上,2PI是X. < / p>

示例)如果myOri=(1,1)(座席面向右上方),则XX=(1, -1)(因为X轴在他右上方)和YY=(1, 1)( Y轴是左上角)。在下图中,X和Y以红色和绿色显示。我的经纪人是蓝色的,粉红色的地标。因此,我们的初始数据为myPos=(0,-2)lm=(0,-1)relLM=(~0.7,~0.7)

Example image

通过了解myPoslmPos以及relLM,这应该是可能的。但是,我找不到合适的载体。什么是正确的算法?

bool someFunction(Landmark *lm, Vector2f myPos, Vector2f *xx, Vector2f *yy){
    // Vector from agent to landmark
    Vector2f agentToLandmark(lm->position.x - myPos.x,
            lm->position.y - myPos.y);

    // Vector from agent to landmark, regarding agent's orientation
    Vector2f agentFacingLandmark = lm->relPosition.toCartesian();        

    // Set the XX and YY values
    // how?
}

我的问题实际上是3D,但使用2D会让问题更容易解释。

1 个答案:

答案 0 :(得分:0)

查找myOri

由于relLM相对于lmmyOrilm + relLM必须位于myPos + µ * myOri。因此lm + relLM - myPos = myOri * µ。由于在这种情况下必须提供µ > 0,并且myOri只需要指明方向,因此选择任意µ > 0就足够了。

查找xx和yy

我认为你对xx的定义只是一个代表代理POV的x轴的向量。 yy和y轴也是如此。这很容易实现。 myOri和x轴之间的角度等于x轴和xx之间的角度,因此只需在x轴上镜像myOri并得到{{1} }。所以xxxx = (myOri.x , myOri.y * (-1))和y轴之间的角度等于myOrimyOri之间的角度,因此yy

请注意,这只是猜测你的意思 可能是我误解了一些东西。如果是这样的话,请通知我。