Javascript:在数字范围之间转换,保持正确的比例
Javascript: Converting between number ranges, keeping the correct ratio
我有两组像素坐标来表示一个边界框:
top left:
x: 19757934
y: 25240264
bottom right:
x: 19759195
y: 25240776
我需要将另一个点的坐标(位于不同的数字范围内)转换为上述范围,保持原始比率(以找出该点在边界框中的位置)。
x: 423
y: 142
假设有一个用户单击的框,该框对其他地方的"结果"框执行某些操作,例如缩小的框。
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}
好的,第一个边界框是 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.
相关文章:
- 需要将变量设置为特定的数字范围
- 用于验证数字范围的正则表达式
- Javascript/Jquery:使用数字范围验证输入
- 创建使用用户输入的数字范围生成的随机数.(JavaScript)
- 需要Javascript数学表达式或公式来将数字范围放在组中
- Javascript / jQuery - 将一个数字范围映射到另一个数字范围
- 始终在 3K 数字范围内选择不同的数字
- Javascript:在数字范围之间转换,保持正确的比例
- 如何在其他重叠的数字范围之间找到可用的数字范围
- 检查数字范围内没有重复项的数字范围的最有效方法
- 在javascript中选择数字范围的算法
- 输入-限制数字范围
- 6位base36数字范围的正则表达式
- 在数字范围内查找空白
- 纯javascript html 5文本类型数字范围验证
- 正则表达式,用于数字中有空格的数字范围
- HTML表单下拉菜单指定数字范围
- 使用循环javascript的数字范围
- 如何在jquery中使用切换大小写(数字范围)
- 构造正则表达式以匹配数字范围