繁体   English   中英

使用X,Y和Z查找Y角

[英]Finding Y angle using X, Y & Z

我目前正在使用此代码:

struct vec3_t
{
public:
    float x, y, z;
};

vec3_t Subtract(vec3_t src, vec3_t dst)
{
    vec3_t diff;
    diff.x = src.x - dst.x;
    diff.y = src.y - dst.y;
    diff.z = src.z - dst.z;
    return diff;
}
float Magnitude(vec3_t vec)
{
    return std::sqrt(vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
}
float Distance(vec3_t src, vec3_t dst)
{
    vec3_t diff = Subtract(src, dst);
    return Magnitude(diff);
}
vec3_t CalcAngle(vec3_t src, vec3_t dst)
{
    vec3_t angles;
    angles.x = (-(float)std::atan2(dst.x - src.x, dst.y - src.y)) / PI * 180.0f + 180.0f;
    angles.y = (std::atan2(dst.z - src.z, Distance(src, dst))) * (180.0f / PI);
    angles.z = 0.0f;

    printf("%f - %f\n", src.z - dst.z, angles.y);


    return angles;
}

然而,当z值的增量增加时,我的角度不能完全工作。 角度缺乏陡度,目标高于目标位置。

但是,当Z轴的增量小于20时,角度会起作用并且针对我想要的玩家。

我在这里有一些例子:

当三角洲真的很小

瞄准机器人Pic

当三角洲很棒

缺少机器人的Pic

PS我从以下所说的全部都是这样

vec3_t CurrentPos;
CurrentPos.x = x.ReadMemory<float>(LocalPlayer + PlayerOffsetList["PosX"]);
CurrentPos.y = x.ReadMemory<float>(LocalPlayer + PlayerOffsetList["PosY"]);
CurrentPos.z = x.ReadMemory<float>(LocalPlayer + PlayerOffsetList["PosZ"]);

vec3_t EnemyPos;
EnemyPos.x = Enemy.Posx;
EnemyPos.y = Enemy.Posy;
EnemyPos.z = Enemy.Posz;

vec3_t Result;
Result = AimbotMath.CalcAngle(EnemyPos, CurrentPos);

x.WriteMemory<float>(AddrList["ViewX"], (Result.x + 90.0f));
x.WriteMemory<float>(AddrList["ViewY"], Result.y);

假设,在你的CalcAngles方法中,x是偏航,y是俯仰:

vec3_t CalcAngle(vec3_t src, vec3_t dst)
{
    vec3_t angles;
    vec3_t delta = Subtract(dst, src);
    angles.x = -(float)std::atan2(delta.x, delta.y) / PI * 180.0f + 180.0f;
    //zero out the z to get the *horizontal* distance
    vec3_t horizontal = delta;
    horizontal.z = 0;
    angles.y = std::atan2(delta.z, Magnitude(horizontal)) * (180.0f / PI);
    angles.z = 0.0f;

    printf("%f - %f\n", delta.z, angles.y);


    return angles;
}

注意,我保留了xy顺序,以及180.0f的偏移量,因为我认为它对你的参考点是正确的。 通常atan2(y, x)

std::atan2(dst.z - src.z, Distance(src, dst))

atan2取两个轴的增量,通常是xy 但是,你用斜边的距离喂它。 这里的第二个参数应该是y的差异,可能不是总距离。

就像是:

angles.x = (-(float)std::atan2(dst.x - src.x, dst.y - src.y)) / PI * 180.0f + 180.0f;
angles.y = (-(float)std::atan2(dst.z - src.z, DistanceXY(src, dst)) / PI * 180.0f + 180.0f;

我没有对它进行测试,因此您可能需要向下调整注册,或旋转90或180度。 但形式应该是正确的。

编辑 :事实上,您可能只需要使用不使用z组件的2D距离函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM