gpt4 book ai didi

c++ - 如何从位置和地标获取 (X,Y) vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:09 25 4
gpt4 key购买 nike

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

我的目标是找出方向 vector 与 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 上。

示例)如果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 使问题更容易解释。

最佳答案

寻找 myOri

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

寻找xx和yy

我认为您对 xx 的定义只是表示代理 POV 的 x 轴的 vector 。 yy 和 y 轴也是如此。这很容易实现。 myOri 和 x 轴之间的角度等于 x 轴和 xx 之间的角度,因此简单地在 x 处镜像 myOri -axis,你得到了 xx。所以 xx = (myOri.x , myOri.y * (-1))myOri 与 y 轴的夹角等于 myOriyy 的夹角,所以 yy = myOri.

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com