-1

我有两组代表边界框的像素坐标:

top left: 
x: 19757934
y: 25240264

bottom right: 
x: 19759195
y: 25240776

我需要将位于不同数字范围内的另一个点的坐标转换为上述范围,保持原始比率(以找出该点在边界框中的位置)。

x: 423
y: 142
4

2 回答 2

1

假设用户点击了一个框,它对其他地方的“结果”框做了一些事情,就像一个缩小的框。

var from_coords = {x1:50,y1:80,x2:150,y2:180};
var to_coords = {x1:200,y1:230,x2:400,y2:430};
function translate(input_coords) { // input_coords = {x:123,y:123}
    return {
        x:to_coords.x1+(input_coords.x-from_coords.x1)*(to_coords.x2-to_coords.x1)/(from_coords.x2-from_coords.x1),
        y:to_coords.y1+(input_coords.y-from_coords.y1)*(to_coords.y2-to_coords.y1)/(from_coords.y2-from_coords.y1)
    };
}

console.log(translate({x:123,y:123}); // outputs {x:346,y:316}
于 2012-04-15T21:57:09.420 回答
0

OK,第一个bounding box是1261x512,使得width/height = 2.462890

我将“不同的数字范围”称为宽度为 W2 和高度为 H1 的框。如果 W2/H2 不等于 2.462890,那么整个练习就毫无意义,因为您需要重新调整宽度或高度。

如果第二个框的左上角不是 (0,0),则将所有点移动到 (0,0),然后在进行计算后移回。我假设 (0,0) 是左上角。

因此,您只需要一个维度上的比率。找出 423/W2 是什么,然后乘以 1261。这就得到了 X 偏移量,您将其与 19757934 相加。

通过测量的比率,对于 Y,我们只需乘以:512 * 423/W2,然后加到 25240264。

Example: second box is 985x400. Ratio = 423/985 = 0.429.
0.429 * 1261 = 541; 541 + 19757934 = 19758475.
for Y: 0.429 * 512 = 219; 219 + 25240264 = 25240483.
于 2012-04-15T21:57:30.087 回答