我想创建一个函数,使正方形绕其轴旋转。
var halfWidth = canvas.width/2;
var halfHeight = canvas.height/2;
var x = halfWidth-10;
var y = halfHeight-10;
var w = 20;
var h = 20;
var deg = 45;
rotate(x, y, w, h, deg);
ctx.fillRect(x, y, w, h);
功能:
function rotate(x, y, w, h, deg) {
// ctx.translate() and ctx.rotate()
// goes here.
}
如何做到这一点?
5条答案
按热度按时间whhtz7ly1#
谢谢dr.dredel的链接。
说明:
ctx.save()
保存坐标系的当前状态。ctx.translate(cx, cy)
将原点更改为画布中心ctx.rotate(deg * Math.PI/180)
将正方形旋转45度(请注意,参数以弧度为单位,而不是度)ctx.fillRect( x, y, w, h )
绘制正方形ctx.restore()
恢复坐标系的最后状态。JS Fiddle link。
Another JS Fiddle link, with a HTML5 slider。
rbl8hiat2#
如果你不想处理
ctx.save()
之类的问题,有一个简单的方法可以计算旋转后的正方形的每个新点应该在哪里。下面将绘制一个绿色正方形,然后绘制一个旋转22.5°的红色正方形。
我把这个图表放在一起,认为它可能有助于可视化正在发生的事情。
zzzyeukh3#
如果我没记错的话,所涉及的平移是首先平移到矩形的中心点,然后旋转所需的量,然后绘制。或者可能先旋转,然后翻译,我有点生 rust =)
a11xaf1n4#
以下是我意见:
JavaScript
ctx 2是旧位置,ctx是形状的新位置。你必须根据你想定位的形状,用相同的x,y坐标平移形状。然后你必须输入
ctx.fillRect(x,y,w,h);
的值,保持x和y作为-ve值(高度和宽度的一半,以保持它在画布的对角线上,否则改变来操纵它)。和h,w作为期望值。DMEO
u0njafvf5#
这里有另一个解决方案