根据鼠标位置找到一个方向

Find a direction, depending on the mouse position

各位同事晚上好。问题如下:有一个3D模型需要根据鼠标的位置来旋转前部:向前,向后,向左,向右。要旋转模型,函数 returns 模型前部将旋转到的点。该图像显示了 4 个区域,当鼠标悬停在这些区域时,将设置方向。需要编写一个函数来确定两个点 x 和 z,具体取决于鼠标光标在任何区域中的位置,即如果鼠标在上部区域,它应该 return 一个坐标为 x 的点= 0, z = 1 下面是我的工作代码,但是我觉得可以减少到几乎一行,但是由于我的数学不强,所以呼吁你。

Image

function getStrictPointerPosition(pointerX: number, pointerZ: number): { x: number, z: number } {
    let resultX: number = 0;
    let resultZ: number = 0;
    let absX: number = Math.abs(pointerX);
    let absZ: number = Math.abs(pointerZ);
    if (pointerX > 0 && pointerZ > 0) {
        if (absX >= absZ) {
            resultX = 1;
        } else {
            resultZ = 1;
        }
    } else if (pointerX < 0 && pointerZ > 0) {
        if (absX >= absZ) {
            resultX = -1;
        } else {
            resultZ = 1;
        }
    } else if (pointerX < 0 && pointerZ < 0) {
        if (absX >= absZ) {
            resultX = -1;
        } else {
            resultZ = -1;
        }
    } else {
        if (absX >= absZ) {
            resultX = 1;
        } else {
            resultZ = -1;
        }
    }
    return {x: resultX, z: resultZ};
}

测试用例

console.log(getStrictPointerPosition(2, -4)); // [0, -1]
console.log(getStrictPointerPosition(-2, -6)); // [0, -1]
console.log(getStrictPointerPosition(6, 2)); // [1, 0]
console.log(getStrictPointerPosition(8, -3)); // [1, 0]
console.log(getStrictPointerPosition(-5, 1)); // [-1, 0]
console.log(getStrictPointerPosition(-2, -1)); // [-1, 0]
console.log(getStrictPointerPosition(6, 2)); // [1, 0]
console.log(getStrictPointerPosition(8, -2)); // [1, 0]
console.log(getStrictPointerPosition(6, 6)); // [1, 0]
console.log(getStrictPointerPosition(-6, 6)); // [-1, 0]
console.log(getStrictPointerPosition(-6, -6)); // [-1, 0]
console.log(getStrictPointerPosition(6, -6)); // [1, 0]

当一个点落在其中一条对角线上时,无论函数return是两个方向中的哪一个,例如输入数据x = 6,z = -6,函数都可以return x = 0, z = -1, 和 x = 1, z = 0.

如果您可以在 TypeScript 中将逻辑表达式结果转换为 0/1 整数
(我不知道但是 booleans are implemented as numerical values with a single binary digit (i.e., 0 & 1)),
代码可能很短:

Python code at ideone

def qu(x, z):
    return -1 + int(x>z) + int(x>-z), -1 + int(z>x) + int(z>-x)

替代方案是三元运算符(x>z?1:0)