让我的玩家看看点

时间:2014-01-26 13:26:27

标签: 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.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;

    }

}

我找了一个音调算法,但似乎都没有。

1 个答案:

答案 0 :(得分:2)

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

首先,您需要按点减去您的位置并对结果进行标准化,这将为我们提供所需的方向向量(单位向量)。

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

了解原因:https://en.wikipedia.org/wiki/Inverse_trigonometric_functions

现在你应该有俯仰和偏航,不要忘记将它们转换为度数!

这里有一些代码:

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;
}