gpt4 book ai didi

java - 一种检查只有一个变量不为 0 的简短数学方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:08 28 4
gpt4 key购买 nike

我有一个给定的方法 Direction calculateDirection(Vector3 from, Vector3 to)其中 Vector3 包含 X、Y、Z

该方法的目的是计算一条直线方向,不能是对角线,只能是X_LEFT或者X_RIGHT,或者Z_LEFT,或 Z_RIGHTTOPDOWN

所以我开始获取偏移量:

Direction calculateDirection(Vector3 from, Vector3 to) {
int x = from.getX() - to.getX();
int y = from.getY() - to.getY();
int z = from.getZ() - to.getZ();
}

所以要知道方向,这些变量之一不应该为 0,如果有多个变量不为 0,我需要返回 null 或抛出一个 异常

为此,我需要执行一些ifelseif,但我对此感到不舒服,我觉得可以有一个更简单的方法数学解。

例如,如果只有 x 不是 0,那么我可以检查它是否为负数,如果是,则它是 X_LEFT

我想补充一点,X、Y、Z 可以是 -1、0 或 1。

最佳答案

看来你不只是想验证只有一个不为零,而是你实际上需要确定一个Direction。值(value)。

由于x的值(value)只能是-1 , 0 , 或 1 ,如果您添加 1你明白了 x可以是0 , 1 , 或 2 ,这将适合 2 位。如果您随后对 y 执行相同操作和 z并移动它们的位,然后您可以将所有 3 个组合成一个 int值(value)。

从技术上讲,您只需要移动 2 以防止位重叠,但为了清楚起见,我们将移动 y通过 4 和 z到 8 点,所以他们每个人都会在一个单独的 nibble 中.

switch ((x + 1) | ((y + 1) << 4) | ((z + 1) << 8)) {
case 0x110: return Direction.X_LEFT; // x == -1, y == 0, z == 0
case 0x112: return Direction.X_RIGHT; // x == 1, y == 0, z == 0
case 0x101: return Direction.DOWN; // x == 0, y == -1, z == 0
case 0x121: return Direction.TOP; // x == 0, y == 1, z == 0
case 0x011: return Direction.Z_LEFT; // x == 0, y == 0, z == -1
case 0x211: return Direction.Z_RIGHT; // x == 0, y == 0, z == 1
default: return null; // other invalid combination
}

这种位操作是否涵盖了您对“简单数学解决方案”的渴望?

关于java - 一种检查只有一个变量不为 0 的简短数学方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42857201/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com