【发布时间】: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)。
通过了解myPos 和lmPos 以及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是已知的并且等于relLM2. 从数学的角度来看,关于轴“在代理前面”的点是完全错误的.绝对没有办法为两条线定义这种关系。 -
是的,我的颜色错了,我的错。但它应该是 (0.7, 0.7)。您可以通过代理参考看到您有正的 X 和 Y 才能到达地标。还是我混淆了什么?关于
in front of,这只是我向您展示代理如何映射相对对象的一种方式。relLM=(10,0)表示地标就在代理的正前方,距离 10 个单位。