canvas 上下文绘图方法要求我们在其方法中提供一些坐标和长度。
比如fillRect(x y, width, height)方法的x、y、width、height。
所有这些值都是无单位的,所以我们将其命名为 magical-unit。
由于画布是光栅图像,因此首先决定每个 magical-unit 代表该光栅图像的一个像素。当我们设置画布width 或height 时,我们只是改变了画布可以容纳的像素数。
因此,我们可以构建一个不错的 magical-unit-grid canvas.width * canvas.height * 1。
在这种情况下,当将 (10, 10) 作为参数传递给期望坐标为 magical-units 的方法时,指针将移动到坐标 10, 10 处的像素。
现在,有一些方法,比如scale(),还有translate()、transform() 等,它们会修改我们的magical-unit-grid。
例如,
translate(5, 10) 会将我们的 magical-unit-grid 水平移动 5 个magical-units,垂直移动 10 个。所以现在坐标(10,10) 将实际指向坐标15, 20 (10 + 5, 10 + 10) 处的像素。
在调用scale(2, 2) 之后,一个magical-unit 现在将等于画布上的两个像素。因此,如果我们将(10, 10) 传递给与上述相同的方法,我们的指针实际上将移动到坐标20, 20 处的像素。
我们以前的绘图不会改变,画布的质量没有什么不同,唯一改变的是我们的 magical-unit 的值。