2014-11-03 42 views
0

我有一個Vector3f有3個座標,用於玩家在3D平面上看的方向。而且我也有一個玩家所在的矢量。我怎樣才能得到一個點x遠低於向量和方向形成的想象線?任何幫助appriciated。如何在一個點和一個方向形成的假想線上得到一個點x的距離

編輯 繼承人什麼反應的一個說到做到

float x; 
    float y; 
    float z; 

    float d = 5; 

    Vector3f p = Camera.rotation; 
    Vector3f v = Camera.vector; 

    float mag = (float) Math.sqrt(Math.pow(p.x,2) + Math.pow(p.y,2) + Math.pow(p.z,2)); 
    Vector3f normalized = new Vector3f(p.x/mag,p.y/mag,p.z/mag); 

    Vector3 pos1 = new Vector3(v.x,v.y,v.z); 
    Vector3 dir1 = new Vector3(normalized.x,normalized.y,normalized.z); 

    Vector3 hh = pos1.add(dir1.scale(d)); 

    x = hh.x; 
    y = hh.y; 
    z = hh.z; 

EDIT2

我已經意識到,沒有在任何轉動z軸,因爲它是在360 *爲側旋轉。幫幫我?

回答

0

爲了清楚起見,我會改變你的問題,以便距離不是x而是d

讓玩家位置座標是px, py, pz

讓觀看方向是vx, vy, vz

h視圖方向矢量的斜邊是

h = sqrt (vx*vx + vy*vy + vz*vz); 

目標點的座標tx, ty, tz會be

tx = px + d * vx/h; 
ty = py + d * vy/h; 
tz = pz + d * vz/h; 

無需對視圖方向矢量進行歸一化。

+0

無論你或其他人工作正常。他們都在幾乎沒有任何輪換的情況下將矢量返回到頭頂以上的位置 – 2014-11-03 23:49:24

+0

在這種情況下,由於兩個類似的答案不起作用,所以最好發佈代碼以顯示如何實現它們。 – 2014-11-03 23:53:13

+0

我已經再次看過 – 2014-11-04 00:00:10

0

假設你想要沿着玩家面對他們當前位置的直線距離的一個點,你應該首先將方向矢量歸一化(如果它還沒有被分割),然後再乘以你想去的距離,最後加上球員的位置。

Normalize Vector 
---------------- 
v = [3, 6, 2] 
mag = sqrt(3^2 + 6^2, 2^2) = 7 
v_normalized = [3/7, 6/7, 2/7] = [0.43, 0.86, 0.29] 

因此,例如:

pos = [2, 1, 5] 
dir = [0.43, 0.86, 0.29] 
dist = 9 

distant_point = pos + dir*dist = [5.87, 8.74, 7.61]