2014-11-03 28 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] 
相关问题