我现在在地图上有一个探员,他的位置叫做myPos=(myX,myY),但是他的方位未知。我在myOri=(oriX,oriY)位置也看到了一个地标,从我的角度看,地标有笛卡尔坐标和极坐标,分别为lm=(lmX,lmY)和relLM=(relX,relY)。
我的目标是找到我的方位向量如何与X和Y轴相关,如polLM=(r,theta)和XX=(xX, xY)。假设下面的例子X向右生长,Y向上生长,0个旋转的代理遵循X轴(所以右边的代理有YY=(yX, yY)和XX=(1,0)。这是从intuition > X轴上有0个角度旋转,π/2旋转在y上,π在-x上,3pi/2在y上,2pi是X.。
例如,如果YY=(0,1)(代理正面临右上),则myOri=(1,1)(因为x轴是右上)和XX=(1, -1)(y轴是左上)。在下图中,x和y以红色和绿色显示。我的经纪人是蓝色的,地标是粉色的因此,我们的初始数据是YY=(1, 1),myPos=(0,-2),lm=(0,-1)。
c++ - 如何从位置和地标获取(X,Y) vector-LMLPHP
通过了解relLM=(~0.7,~0.7)和myPos以及lmPos,这应该是可能的但是,我找不到合适的向量。正确的算法是什么?

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使问题更容易解释。

最佳答案

发现肌力
由于relLM是相对于lm的myOri,因此lm + relLM必须在myPos + µ * myOri中。因此lm + relLM - myPos = myOri * µ因为在这种情况下必须给出µ > 0,而且myOri只需要指示一个方向,所以选择任意的µ > 0就足够了。
查找xx和yy
我认为你对“cc>”的定义只是一个向量,代表了代理的POV的X轴。同样适用于xx和y轴。这很容易实现。和x轴之间的角度等于x轴与yy之间的夹角,因此在x轴上只是镜子myOri,得到了xx。所以myOrixx和y轴之间的夹角等于xx = (myOri.x , myOri.y * (-1))和myOri之间的夹角,所以myOri。
注意,这只是猜测你的意思。
可能是我误解了什么如果是这样的话就通知我。

关于c++ - 如何从位置和地标获取(X,Y) vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35087436/

10-10 18:55