0

我想为 Minecraft 服务器软件制作一个保护插件,并且我想使用 Vector3。我想检查 Vector3 是否在 2 个位置(Vector3)之间。

Vector3 具有以下值:x、y 和 z。我现在如何检查一个向量是否在另外两个之间?

Vector3 pos1 = new Vector3(100, 10, 100);
Vector3 pos2 = new Vector3(10, 100, 43);
Vector3 vector3tocheck = new Vector3(60, 23, 1); // it should be between the 2 positions

public boolean isInTwoVectors(Vector3 pos1, Vector3 pos2, Vector3 vector3tocheck) {
// Here idk how to continue.
}

我期待结果是否在两个位置。

4

1 回答 1

0
public boolean isInTwoVectors(Vector3 pos1, Vector3 pos2, Vector3 check) {
    int minX = Math.min(pos1.x, pos2.x);
    int maxX = Math.max(pos1.x, pos2.x);
    int minY = Math.min(pos1.y, pos2.y);
    int maxY = Math.max(pos1.y, pos2.y);
    int minZ = Math.min(pos1.z, pos2.z);
    int maxZ = Math.max(pos1.z, pos2.z);
    return check.x >= minX && check.x <= maxX && check.y >= minY && check.y <= maxY
        && check.z >= minZ && check.z <= maxZ;
}

简单地说,检查所有 x、y 和 z 边界,看向量是否在其中。作为记录,在您的示例中,给定向量将不在范围内,因为它的 z 值超出范围(在 [43,100] 之外)。在这种情况下(不关心 z 值),您只需检查 x 和 y 值,如下所示:

public boolean isInTwoVectorsXY(Vector3 pos1, Vector3 pos2, Vector3 check) {
    int minX = Math.min(pos1.x, pos2.x);
    int maxX = Math.max(pos1.x, pos2.x);
    int minY = Math.min(pos1.y, pos2.y);
    int maxY = Math.max(pos1.y, pos2.y);
    return check.x >= minX && check.x <= maxX && check.y >= minY && check.y <= maxY;
}

或者,也许您实际上是指这样这样的东西?

于 2019-08-14T20:16:40.343 回答