Java 让minecraft玩家看问题

Java 让minecraft玩家看问题,java,math,minecraft,Java,Math,Minecraft,我试图让球员看在特定的点。我所看到的只是这一点,但前提是它在它的视野中。我希望它也能上下看 public static void lookAt(double x, double y, double z) { double l; double w; double c; l = x - playerX; w = z - playerZ; c = Math.sqrt(l * l + w + w); double alpha1 = -Math.a

我试图让球员看在特定的点。我所看到的只是这一点,但前提是它在它的视野中。我希望它也能上下看

 public static void lookAt(double x, double y, double z) {
    double l;
    double w;
    double c;
    l = x - playerX;
    w = z - playerZ;
    c = Math.sqrt(l * l + w + w);
    double alpha1 = -Math.asin(l / c) / Math.PI * 180;
    double alpha2 = Math.acos(w / c) / Math.PI * 180;
    if (alpha2 > 180) {
        playerYaw = 180 - (float) alpha1;

    } else {
        playerYaw = (float) alpha1;

    }

}

我找了一个俯仰算法,但似乎没有一个有效。

回答晚了,但哦,如果你能得到一个单位向量,表示从你的位置到你想看的点的方向,你可以用简单的三角法计算俯仰和偏航

首先,你需要用点减去你的位置,然后对结果进行归一化,这将得到我们需要的方向向量(单位向量)

现在我们可以计算角度,Y的正弦弧将给出俯仰角,X和Z的tan弧将给出偏航角

要了解原因:

现在你应该有了俯仰和偏航,别忘了把它们转换成度

下面是一些代码:

public static void LookAt(double px, double py, double pz , EntityPlayer me)
{
    double dirx = me.getPosition(0f).X - px;
    double diry = me.getPosition(0f).Y - py;
    double dirz = me.getPosition(0f).Z - pz;

    double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz);

    dirx /= len
    diry /= len;
    dirz /= len;

    double pitch = Math.asin(dir.y);
    double yaw = Math.atan2(dir.z, dir.x);

    //to degree
    pitch = pitch * 180.0 / Math.PI;
    yaw = yaw * 180.0 / Math.PI;

    yaw += 90f;
    me.rotationPitch = (float)pitch;
    me.rotationYaw = (float)yaw;
}

回答晚了,但是,如果你能得到一个单位向量,表示从你的位置到你想看的点的方向,你可以用简单的三角法计算俯仰和偏航

首先,你需要用点减去你的位置,然后对结果进行归一化,这将得到我们需要的方向向量(单位向量)

现在我们可以计算角度,Y的正弦弧将给出俯仰角,X和Z的tan弧将给出偏航角

要了解原因:

现在你应该有了俯仰和偏航,别忘了把它们转换成度

下面是一些代码:

public static void LookAt(double px, double py, double pz , EntityPlayer me)
{
    double dirx = me.getPosition(0f).X - px;
    double diry = me.getPosition(0f).Y - py;
    double dirz = me.getPosition(0f).Z - pz;

    double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz);

    dirx /= len
    diry /= len;
    dirz /= len;

    double pitch = Math.asin(dir.y);
    double yaw = Math.atan2(dir.z, dir.x);

    //to degree
    pitch = pitch * 180.0 / Math.PI;
    yaw = yaw * 180.0 / Math.PI;

    yaw += 90f;
    me.rotationPitch = (float)pitch;
    me.rotationYaw = (float)yaw;
}

回答晚了,但是,如果你能得到一个单位向量,表示从你的位置到你想看的点的方向,你可以用简单的三角法计算俯仰和偏航

首先,你需要用点减去你的位置,然后对结果进行归一化,这将得到我们需要的方向向量(单位向量)

现在我们可以计算角度,Y的正弦弧将给出俯仰角,X和Z的tan弧将给出偏航角

要了解原因:

现在你应该有了俯仰和偏航,别忘了把它们转换成度

下面是一些代码:

public static void LookAt(double px, double py, double pz , EntityPlayer me)
{
    double dirx = me.getPosition(0f).X - px;
    double diry = me.getPosition(0f).Y - py;
    double dirz = me.getPosition(0f).Z - pz;

    double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz);

    dirx /= len
    diry /= len;
    dirz /= len;

    double pitch = Math.asin(dir.y);
    double yaw = Math.atan2(dir.z, dir.x);

    //to degree
    pitch = pitch * 180.0 / Math.PI;
    yaw = yaw * 180.0 / Math.PI;

    yaw += 90f;
    me.rotationPitch = (float)pitch;
    me.rotationYaw = (float)yaw;
}

回答晚了,但是,如果你能得到一个单位向量,表示从你的位置到你想看的点的方向,你可以用简单的三角法计算俯仰和偏航

首先,你需要用点减去你的位置,然后对结果进行归一化,这将得到我们需要的方向向量(单位向量)

现在我们可以计算角度,Y的正弦弧将给出俯仰角,X和Z的tan弧将给出偏航角

要了解原因:

现在你应该有了俯仰和偏航,别忘了把它们转换成度

下面是一些代码:

public static void LookAt(double px, double py, double pz , EntityPlayer me)
{
    double dirx = me.getPosition(0f).X - px;
    double diry = me.getPosition(0f).Y - py;
    double dirz = me.getPosition(0f).Z - pz;

    double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz);

    dirx /= len
    diry /= len;
    dirz /= len;

    double pitch = Math.asin(dir.y);
    double yaw = Math.atan2(dir.z, dir.x);

    //to degree
    pitch = pitch * 180.0 / Math.PI;
    yaw = yaw * 180.0 / Math.PI;

    yaw += 90f;
    me.rotationPitch = (float)pitch;
    me.rotationYaw = (float)yaw;
}

我会先给lwc起个更好的名字。l对任何东西来说都是一个非常糟糕的名字,因为它看起来像头号。我会先给lwc起个更好的名字。l对任何东西来说都是一个非常糟糕的名字,因为它看起来像头号。我会先给lwc起个更好的名字。l对任何东西来说都是一个非常糟糕的名字,因为它看起来像头号。我会先给lwc起个更好的名字。对于任何东西来说,l都是一个非常糟糕的名字,因为它看起来像是头号的。谢谢,这是可行的,但它让玩家看到的是实体所站的块,而不是实体的高度。(虽然这很简单,可以更改)谢谢,这很有效,但它让玩家看到实体所站的块,而不是实体高度。(虽然这很简单,可以更改)谢谢,这很有效,但它让玩家看到实体所站的块,而不是实体高度。(虽然这很简单,可以更改)谢谢,这很有效,但它让玩家看到实体所站的块,而不是实体高度。(尽管这很简单,可以改变)