Javascript Kinetic.js:触摸时旋转图像
我有把小提琴: 图像旋转不正确。 我使用的代码是:Javascript Kinetic.js:触摸时旋转图像,javascript,math,animation,kineticjs,Javascript,Math,Animation,Kineticjs,我有把小提琴: 图像旋转不正确。 我使用的代码是: var stage = new Kinetic.Stage({ container: 'd', width: 300, height: 300 }); var layer = new Kinetic.Layer(); var isDragging = false; var refRotation = null; var rect = new Kinetic.Rect({ x: 150, y: 150
var stage = new Kinetic.Stage({
container: 'd',
width: 300,
height: 300
});
var layer = new Kinetic.Layer();
var isDragging = false;
var refRotation = null;
var rect = new Kinetic.Rect({
x: 150,
y: 150,
width: 100,
height: 100,
fill: 'green',
stroke: 'black',
strokeWidth: 4,
offset: [50, 50],
dragOnTop: true,
draggable: true,
dragBoundFunc: function (pos) {
var xd = 150 - pos.x ;
var yd = 150 - pos.y ;
var theta = Math.atan2(yd, xd);
var deg = theta * 180 / Math.PI;
if (!isDragging) {
isDragging = true;
refRotation = deg;
} else {
var rotate = deg - refRotation;
rect.setRotationDeg(deg);
}
return {
x: this.getAbsolutePosition().x,
y: this.getAbsolutePosition().y
}
}
});
层。添加(rect);
阶段。添加(层)
有人知道我的数学有什么问题吗
---编辑---
我想要的新的拥抱:
我不懂数学,但似乎x和y的计算对我来说不合适。我会从中间扣除位置,而不是从位置扣除中间 另外,我也看到你的变量没有被使用;i拖动、重新旋转和旋转 -----编辑---- 如果要通过拾取角旋转矩形,可以使用以下代码。 拾取角点时,由“中心位置”计算的度数已为45。这就是为什么你不能正确地拾起角落。通过调整45使它看起来是正确的,但当你选择直线时,它会再次出错。看来你的要求有缺陷,除非是有意的
我认为你的数学没有问题。它旋转正确。当你说不正确的时候,它会做什么?你期望什么。我注意到的唯一一件事是,光标越靠近矩形,它就越奇怪;但那是因为没有把手。如果在红色矩形边框上移动时旋转。它很好。你的小提琴也不正确。我想要的是,在一个正方形的角点上点击并移动,我想要这个角点用鼠标旋转。此时,鼠标的旋转速度加快了…不知道“旋转不正确”到底是什么意思。更新了答案。
var x = 150 - pos.x;
var y = 150 - pos.y;
var radian = Math.PI + Math.atan(y/x);
this.setRotation(radian);
var pos = stage.getMousePosition();
var xd = 150 - pos.x ;
var yd = 150 - pos.y ;
var theta = Math.atan2(yd, xd);
var degree = theta / (Math.PI / 180) - 45;
this.setRotationDeg(degree);