Javascript:在数字范围之间转换,保持正确的比例

时间:2012-04-15 21:29:02

标签: javascript math range

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

top left: 
x: 19757934
y: 25240264

bottom right: 
x: 19759195
y: 25240776

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

x: 423
y: 142

2 个答案:

答案 0 :(得分: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}

答案 1 :(得分:0)

好的,第一个边界框是1261x512,宽度/高度= 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.