感谢您的解释。
为了解决这个问题,我将返回值更改为 val -extent[0] + 0.5。这里的“a”、“b”、“c”,缩放前分别为 0、1、2,缩放后分别为 -0.5、0.5、1.5(位于 -50%、50%、150%)。
这是一个很好的观点。这里的问题是,即使值超出范围,我们仍然返回范围内的值 0.5。更预期的行为是,当 val 小于程度[0] 时返回 < 0,当 val 大于程度[1] 时返回 > 1,以确保标准化值也超出范围 [0, 1]。 val - extent[0] + 0.5
可以按顺序进行,其中 val 是整数。但当涉及到小数时,就失败了。结果可能仍在[0, 1]范围内。所以我认为val < extent[0] ? -0.5 : val > extent[0] ? 1.5 : 0.5
会更普遍地解决它
为了解决这个问题,我添加了一个检查 subRange 是否为 0,如果是,则返回 (val - d0) / subDomain 2 r0。当 subRange 为 0 时,r0 正好是图表长度的一半,0.5 640 = 320(此处 subDomain = 1)。因此 (val - d0) / subDomain 2 r0 = val ChartLength 将是相应相对位置的绝对位置。
似乎非常底层方法的行为已更改以匹配上层逻辑。这不是解决问题的正确方法,并且可能会影响依赖此方法的其他代码。