根据鼠标位置找到一个方向
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)
),
代码可能很短:
def qu(x, z):
return -1 + int(x>z) + int(x>-z), -1 + int(z>x) + int(z>-x)
替代方案是三元运算符(x>z?1:0)
各位同事晚上好。问题如下:有一个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)
),
代码可能很短:
def qu(x, z):
return -1 + int(x>z) + int(x>-z), -1 + int(z>x) + int(z>-x)
替代方案是三元运算符(x>z?1:0)