簡體   English   中英

如何從位置和地標獲取(X,Y)向量

[英]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)

范例圖片

通過了解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軸。 yy和y軸也一樣。 這很容易實現。 myOri與x軸之間的角度等於x軸與xx之間的角度,因此只需在x軸上鏡像myOri即可得到xx 所以xx = (myOri.x , myOri.y * (-1)) myOri和y軸之間的角度等於myOriyy之間的角度,因此yy = myOri

請注意,這僅是對您的意思的猜測。
可能是因為我誤會了一些東西。 如果是這樣,請通知我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM