如何在玩家的xyz平面中找出前方坐标?

时间:2017-09-01 23:01:29

标签: c++ c geometry

我正在为游戏制作一个mod,我可以获得玩家的XYZ坐标以及他们面对的方向(0到360度之间的值)。我需要使用这些信息来确定角色前面的坐标是根据他们面对的方式。

例如:如果x = 0,y = 0,z = 0且角色面向0度,则为南。假设z轴从北向南运行,那么如果角色向前走一个单位,他们的新坐标将是x = 0,y = 0,z = -1。

2 个答案:

答案 0 :(得分:1)

我假设North是+ Z而East是+ X.此外,方向0为南,90为西。

vec3 DegreeToDirection (float degs) {
    float rads = 3.1415926535f / 180 * degs;
    float s = sinf(rads), c = cosf(rads);
    vec3 ret = {-s, 0, -c};
    return ret;
}

现在只需将其添加到您当前的位置。

编辑:这是来自实际为OP工作的注释的修改代码:(注意X返回值没有否定,这可能意味着我对X轴的假设是错误的。 )

void DegreeToDirection (float degs, float out [3]) {
    float rads = 3.1415926535f / 180 * degs;
    out[0] = sinf(rads);
    out[1] = 0.0f;
    out[2] = -cosf(rads);
}

答案 1 :(得分:0)

所以说你的角色有坐标(A, B, C),你想要创建一个等于一个单位的方向向量(让我们称之为R)。我假设玩家只在这个例子的x,y平面上旅行,所以你会创建一个方向向量:

V =(R * cos(角度),R * sin(角度))

你可以将这个向量添加到你的玩家坐标,所以对于一个向量(x,y),新的玩家坐标将是(A + x,B + y,C)