有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java让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) 个答案

  1. # 1 楼答案

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

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

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

    要了解原因: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;
    }