【发布时间】:2020-12-29 17:58:53
【问题描述】:
我需要根据对象的旋转在画布中使对象居中。我无法弄清楚数学。
我有什么信息?
- 左上角的x、y坐标(见图片红圈)
- 对象的宽度和高度
- 以度为单位的旋转值
到目前为止我尝试了什么?
// center horizontally
if (curretElement === null) return;
curretElement.x((canvas.width() / 2) - ((curretElement.width() * curretElement.scaleX()) / 2));
canvas.draw();
// center vertically
curretElement.y((canvas.height() / 2) - ((curretElement.height() * curretElement.scaleY()) / 2));
canvas.draw();
这会在图像未旋转时居中。
currentElement 是选中的对象。
canvas 是对象应该居中的房间。
【问题讨论】:
-
我假设左上角的 x,y 坐标是您要计算的信息,而不是您拥有的信息?也就是说,物体的位置锚点是左上角,不管角度如何?
-
对,所以要做到这一点,首先需要计算从对象中心到其左上角的向量。这是
(-width * scale / 2, -height * scale / 2),您已经计算过了。将其添加到画布中心,您将获得角度 = 0 的坐标,就像您已经做的那样。对于不同的角度,您需要做的就是在将矢量添加到画布中心之前旋转矢量。您可以为此使用2D rotation matrix。 -
这看起来你正在使用 FabricJs ......你能发布一个完整但最小的项目代码 sn-p
-
我正在使用 konvajs
标签: javascript math canvas geometry