java - 从象限计算坐标
问题描述
我知道这是非常简单的数学,但数学从来都不是我的强项,所以我很感激一些帮助。
我有 4 个 128x128 像素的象限。布局如下:
-- +-
-+ ++
象限的中间是 0,0。所以左上角是-128,-128,右下角是128,128。
我需要将这 4 个象限上的坐标转换为其中 1 个象限或 128x128 网格中的坐标。因此,例如,如果我在象限(左上角)上有 (-128,-128),它将转换为 (0,0)。(128,128) 将保持不变,(0,0) 将转换为 (64,64),等等。
我尝试了各种方法,例如测试它们所在的象限,然后进行一些乘法运算,这很有希望,但我似乎无法完善它。
这实际上不是一个特定于语言的问题,但如果它很重要,我正在使用 Java。
这是我已经尝试过的一个最小(和坏)的例子。我知道这是在 javascript 中,为了简单起见,我在浏览器控制台中对其进行了测试。
function transformX(x, y) {
var i = 0;
if (x > 0 && y > 0) { // Bottom Right
i = 128*2;
} else if (x < 0 && y > 0) { // Bottom Left
i = 128*1;
} else if (x < 0 && y < 0) { // Top Left
i = 128*1;
} else if (x > 0 && y < 0) { // Top Right
i = 128*2;
}
return (i+x) / 512 * 128;
}
这适用于某些事情,但很快就会失败。例如 transformX(-128, -128) 按预期返回 0,但 transformX(-1, -1) 返回 31.75,而它应该是 63。
解决方案
似乎您需要将两个坐标的范围从 -128...128 转换为 0..128:
newx = (oldx + 128) / 2
类似的y
。
推荐阅读
- fonts - TrueType字体cmap表格式0未序列化
- laravel - Laravel - Axios GET 请求失败但 POST 有效
- php - PHP - simplexml_load_file() - I/O 警告:加载外部实体失败
- python - anaconda 是否会针对新环境更改软件包列表?
- python - OpenCv 内部函数“contourArea”错误
- html - 使用 html slim 在 ruby 中创建 href
- dart - 不使用 FutureBuilder 检索数据
- laravel - 创建 php artisan migrate 但不在数据库中创建新表
- python - 无法正确定义 LSTM 的输入以模拟多对一场景
- java - ScrollTo 返回并出错,即使在该位置元素是可点击的