Javascript 旋转后获得左上角的正确坐标
我想显示在画布上绘制的对象的左上角 删除按钮的左侧和顶部位置等于Javascript 旋转后获得左上角的正确坐标,javascript,jquery,html,canvas,geometry,Javascript,Jquery,Html,Canvas,Geometry,我想显示在画布上绘制的对象的左上角 删除按钮的左侧和顶部位置等于object.left+object.width,顶部等于object.top 旋转对象后,删除按钮的左侧和顶部等于对象的原始位置 有人能告诉我如何获得右上角的“真实”XY坐标吗 这是我的JSFIDLE: 一点三角学将为您提供旋转的左上角点 这假定矩形正在围绕其中心点旋转 下面是示例代码和演示: var canvas=document.getElementById(“canvas”); var ctx=canvas.getCo
object.left+object.width
,顶部等于object.top
旋转对象后,删除按钮的左侧
和顶部
等于对象的原始位置
有人能告诉我如何获得右上角的“真实”XY坐标吗
这是我的JSFIDLE:
一点三角学将为您提供旋转的左上角点
这假定矩形正在围绕其中心点旋转
下面是示例代码和演示:
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
var-PI=Math.PI;
var PI2=PI*2;
var x=125;
变量y=132;
var宽度=50;
var高度=36;
var rotationAngle=PI/6;
平移(x+宽度/2,y+高度/2);
ctx.旋转(旋转角度);
ctx.fillStyle='red';
ctx.strokeStyle='black';
ctx.线宽=5;
ctx.fillRect(-width/2,-height/2,width,height);
ctx.strokeRect(-width/2,-height/2,width,height);
ctx.旋转(-rotationAngle);
平移(-(x+宽度/2),-(y+高度/2));
var rotatedTopLeft=rotatedTopLeft(x,y,宽度,高度,旋转角度);
圆点(左旋转左旋转右旋转顶部,5,'gold');
函数旋转到左(x、y、宽度、高度、旋转角度){
//获取矩形的中心(=旋转点)
var cx=x+宽度/2;
var cy=y+高度/2;
//计算未旋转的TL角与中心点的角度
var dx=x-cx;
var-dy=y-cy;
var originalTopLeftAngle=Math.atan2(dy,dx);
//添加未旋转的TL+rotationAngle以获得总旋转
var rotatedTopLeftAngle=原始OPLEFTANGLE+旋转角度;
//计算矩形的半径(=对角线长度/2)
变量半径=数学sqrt(宽度*宽度+高度*高度)/2;
//计算旋转的上角和左角
var rx=cx+半径*数学cos(rotatedTopLeftAngle);
var ry=cy+半径*数学sin(旋转的多边形);
//返回结果
返回({left:rx,top:ry});
}
功能点(x、y、半径、填充){
ctx.beginPath();
弧(x,y,半径,0,PI2);
ctx.closePath();
ctx.fillStyle=填充;
ctx.fill();
}
body{背景色:象牙;}
#画布{边框:1px纯红;}
金色圆点位于旋转的左上角
已知的内容-旋转角度,旋转“手柄”的新位置,还有什么吗?旋转角度,顶部,左侧,对象从中心旋转,您可以检查控制台
delBtn.style.display = 'block';
delBtn.style.left = activeEl.left + (activeEl.width * activeEl.scaleX / 2) - 25 + 'px';
delBtn.style.top = activeEl.top - (activeEl.height * activeEl.scaleX / 2) - 15 + 'px';
function rotatedTopLeft(x,y,width,height,rotationAngle){
// get the center of the rectangle (==rotation point)
var cx=x+width/2;
var cy=y+height/2;
// calc the angle of the unrotated TL corner vs the center point
var dx=x-cx;
var dy=y-cy;
var originalTopLeftAngle=Math.atan2(dy,dx);
// Add the unrotatedTL + rotationAngle to get total rotation
var rotatedTopLeftAngle=originalTopLeftAngle+rotationAngle;
// calc the radius of the rectangle (==diagonalLength/2)
var radius=Math.sqrt(width*width+height*height)/2;
// calc the rotated top & left corner
var rx=cx+radius*Math.cos(rotatedTopLeftAngle);
var ry=cy+radius*Math.sin(rotatedTopLeftAngle);
// return the results
return({left:rx,top:ry});
}