我正在尝试在矩形的四个角上放置调整大小的手柄,这些手柄可以被拖动以调整矩形的大小。我遇到的问题是,在拖动矩形的一个点之后计算新的宽度、高度和矩形的新点。
如果矩形没有旋转,这显然非常容易,因为宽度和高度会像鼠标的 offsetX 和 offsetY 一样改变。然而,这个矩形可以旋转,所以 offsetX 和 offsetY 不匹配宽度/高度的变化。
在上面的图片中,我用实心黑色表示我已经拥有的信息,用浅灰色表示我想要找到的信息。我试图展示如果我把 a1 角拖向右上方,矩形应该如何变化。
谁能帮我算出缺失的信息呢?
感谢任何帮助!非常感激。
--
编辑:我对每个手柄都设置了拖动开始、拖动移动和拖动结束的回调。我的当前代码仅获取新点(在此示例中为 a2)。不幸的是,这只是将我们当前拖动的手柄移动到其新位置,但显然对矩形的宽度/高度以及其他点的位置没有影响。我希望得到帮助,找出如何根据此拖动计算新的宽度和高度以及其他点的新位置。
手柄坐标(拖动前)
handles: {
a: { x: 11, y: 31 },
b: { x: 44, y: 12 },
c: { x: 39, y: 2 },
d: { x: 6, y: 21 }
};
回调函数:
// Save the original x and original y coordinates
// of the handle, before dragging
onDragStart: function(x, y, handle) {
handle.data({
ox: x,
oy: y
});
}
// While dragging the handle, update it's coordinates to
// reflect its new position
onDragMove: function(dx, dy, handle) {
handle.attr({
x: handle.data('ox') + dx,
y: handle.data('oy') + dy
});
}
// Not currently using the drag end callback
onDragEnd: function(x,y,handle) {}