界面元素的坐标常相对于父级。把多层偏移直接相加,容易漏掉缩放对下层位置的影响;逐层变换并按相反顺序还原,可以定位坐标差异出现在哪里。
本篇给出一份完整且可重复的虚构游戏记录。先读清规则,再尝试自行推演输入,最后逐项对照中间状态。不同作品可以选择不同约定,只有在相同前提下才能比较结果;不要只看最终数字相同就认为过程正确。
从最内层开始,三层变换都采用先按横纵倍率缩放,再加本层偏移。倍率均为正整数,没有旋转和裁切。将九个局部点变到世界坐标,再从最外层逆序减偏移并除倍率。
每层[sx,sy,tx,ty],从内向外 [[2, 2, -3, 0], [1, 4, -2, -6], [3, 4, -2, -3]] [[1, -2], [-7, -1], [3, -5], [-7, -6], [-3, 6], [-3, 9], [-7, 3], [-6, -6], [-9, 9]]
局部点[1, -2]经过三层依次为[[-1, -4], [-3, -22], [-11, -91]];逆序还原依次为[['-3', '-22'], ['-1', '-4'], ['1', '-2']],最终回到原点坐标。
局部点[-7, -1]经过三层依次为[[-17, -2], [-19, -14], [-59, -59]];逆序还原依次为[['-19', '-14'], ['-17', '-2'], ['-7', '-1']],最终回到原点坐标。
局部点[3, -5]经过三层依次为[[3, -10], [1, -46], [1, -187]];逆序还原依次为[['1', '-46'], ['3', '-10'], ['3', '-5']],最终回到原点坐标。
局部点[-7, -6]经过三层依次为[[-17, -12], [-19, -54], [-59, -219]];逆序还原依次为[['-19', '-54'], ['-17', '-12'], ['-7', '-6']],最终回到原点坐标。
局部点[-3, 6]经过三层依次为[[-9, 12], [-11, 42], [-35, 165]];逆序还原依次为[['-11', '42'], ['-9', '12'], ['-3', '6']],最终回到原点坐标。
局部点[-3, 9]经过三层依次为[[-9, 18], [-11, 66], [-35, 261]];逆序还原依次为[['-11', '66'], ['-9', '18'], ['-3', '9']],最终回到原点坐标。
局部点[-7, 3]经过三层依次为[[-17, 6], [-19, 18], [-59, 69]];逆序还原依次为[['-19', '18'], ['-17', '6'], ['-7', '3']],最终回到原点坐标。
局部点[-6, -6]经过三层依次为[[-15, -12], [-17, -54], [-53, -219]];逆序还原依次为[['-17', '-54'], ['-15', '-12'], ['-6', '-6']],最终回到原点坐标。
局部点[-9, 9]经过三层依次为[[-21, 18], [-23, 66], [-71, 261]];逆序还原依次为[['-23', '66'], ['-21', '18'], ['-9', '9']],最终回到原点坐标。
九个点均能逆序恢复,缩放和偏移的先后次序保持一致。
把三层变换合并为每个轴的一条一次式,核对正向结果;再用逆序还原检查最初坐标。每一层的偏移属于该层输出坐标,不能跳过层级先统一相加。
例子只关注点的位置,不涉及字体像素取整、图像滤波或点击区域大小。实际界面在某层取整后可能不可精确逆转,本例保留精确数值,目的是把变换顺序问题与渲染误差分开观察。
练习时可以只改动一个输入,再观察哪一步首次出现差异。对等于门槛、重复请求、空集合和最后一步分别留一份记录;如果发现异常,应先回到单位、顺序和边界约定,避免用额外补偿掩盖前面已经发生的错误。