【问题标题】:How to get (X,Y) vectors from position and landmark如何从位置和地标获取(X,Y)向量
【发布时间】:2016-05-07 08:38:51
【问题描述】:

我目前在地图中有一个代理,其位置称为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)这来自@ 987654321@ 其中 0 角旋转在 X 轴上,PI/2 旋转在 Y 轴上,PI 在 -X 上,3PI/2 在 -Y 上,2PI 在 X 轴上。

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

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

【问题讨论】:

  • @trincot 这并不完全适合 math.stackexchange,因为这个问题相当琐碎,很可能会在很短的时间内解决。
  • 那么,你有什么建议?因离题而关闭?
  • @trincot 是的。关闭题外话。除了将问题转移到 math.stackexchange 之外,原因几乎保持不变。或者“不清楚你在问什么”,因为这个问题充满了逻辑和数学错误和误解。
  • @BlueMoon93 尝试在纸上解决问题。你会注意到这个问题有很多问题: 1. myOri 是已知的并且等于 relLM 2. 从数学的角度来看,关于轴“在代理前面”的点是完全错误的.绝对没有办法为两条线定义这种关系。
  • 是的,我的颜色错了,我的错。但它应该是 (0.7, 0.7)。您可以通过代理参考看到您有正的 X 和 Y 才能到达地标。还是我混淆了什么?关于in front of,这只是我向您展示代理如何映射相对对象的一种方式。 relLM=(10,0) 表示地标就在代理的正前方,距离 10 个单位。

标签: c++ algorithm geometry


【解决方案1】:

寻找 myOri

由于relLM 是相对于myOrilm,所以lm + relLM 必须在myPos + µ * myOri 中。因此lm + relLM - myPos = myOri * µ。由于在这种情况下必须给出µ > 0,而myOri只需要指示一个方向,因此选择任意一个µ > 0就足够了。

查找 xx 和 yy

​​>

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

请注意,这只是对您的意思的猜测。
可能是我误解了什么。如果是这种情况,请通知我。

【讨论】:

  • 如何知道myOri 并等于relLM
  • myOri 是代理看的方向,所以从myPoslm 的向量。 relLM 是从代理到lm 的向量。所以relLM = lm - myPosmyPos + myOri * n = lm。我可能应该更好地措辞。存在n >= 0 使得myOri * n = relLM。我会编辑答案
  • 但是代理没有看向地标。他可以,但不一定。你看到我的编辑了吗?
  • @BlueMoon93 刚刚注意到它。我会通读并根据需要编辑答案。
  • @BlueMoon93 我已经编辑了答案,希望这次我理解了一切。
猜你喜欢
  • 2020-07-29
  • 2017-08-28
  • 1970-01-01
  • 2014-02-22
  • 2016-12-27
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多