[英]How to get (X,Y) vectors from position and landmark
我當前在地圖中有一個代理,其位置稱為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)
。 這是根據直覺得出的,其中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)
, 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使問題更易於解釋。
由於relLM
是lm
相對於myOri
, lm + relLM
必須在myPos + µ * myOri
。 因此, lm + relLM - myPos = myOri * µ
。 由於在這種情況下必須給出µ > 0
,並且myOri
只需要指示方向,因此選擇任意µ > 0
就足夠了。
我認為您對xx
的定義只是一個向量,它代表了來自代理POV的x軸。 yy
和y軸也一樣。 這很容易實現。 myOri
與x軸之間的角度等於x軸與xx
之間的角度,因此只需在x軸上鏡像myOri
即可得到xx
。 所以xx = (myOri.x , myOri.y * (-1))
。 myOri
和y軸之間的角度等於myOri
和yy
之間的角度,因此yy = myOri
。
請注意,這僅是對您的意思的猜測。
可能是因為我誤會了一些東西。 如果是這樣,請通知我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.