java - 让我的世界玩家看向点

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

    }

}

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

最佳答案

迟到的答案,但是哦,好吧,如果您可以获得一个表示从您的位置到您想要查看的点的方向的单位 vector ,您可以使用简单的三角学来计算俯仰和偏航。

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

现在我们可以计算角度了,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;
}

关于java - 让我的世界玩家看向点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363968/

相关文章:

c# - C# 中的三次/曲线平滑插值

java - 为什么 onCommand 从未在插件中使用

java - 将minecraft的打印流重定向到JTextArea

java - 有人可以向我解释这段使用移位将两个变量相乘的代码吗?

Java SWT 图像背景颜色

R 指数产生 NaN

java - NPE on plugin.getConfig().set(... , ...);

java - 如何在终端中运行 Java 类

java - 如何在Hibernate中添加有关Annotations的JavaDoc信息?

algorithm - 以非常高的精度找到 2^(1/3) 的连分数