正弦(sin) sinA = a / c sinθ = y / r 余弦(cos) cosA = b / c cosθ = y / r 正切(tan) tanA = a / b tanθ = y / x 余切(cot) cotA = b / a cotθ = x / y js中计算三角函数用Math.sin()等静态方法,参数为弧度 角度与弧度都是角的度量单位 1弧度时,弧长等于半径,那弧长是半径的倍数就是弧度了 弧度 = 弧长 / 半径 弧长 = 弧度 * 半径 弧长 = (角度 / 360) * 周长 角度 = 弧长 / 周长 = 弧长/(2πr) = 弧度*r/(2πr) = 弧度/(2π) 弧度 = 弧长 / 半径 = [(角度 / 360) * 周长] / 半径 =[ (角度 / 360) * 2πr] / r = 角度 * π / 180cxt.scale(2,2) 缩放的是整个画布,缩放后,继续绘制的图形会被放大或缩小。ctx.translate(x,y) 方法重新映射画布上的 (0,0) 位置x: 添加到水平坐标(x)上的值 y: 添加到垂直坐标(y)上的值 发生位移后,相当于把画布的0,0坐标 更换到新的x,y的位置,所有绘制的新元素都被影响。 位移画布一般配合缩放和旋转等。context.rotate(angle) 方法旋转当前的绘图 注意参数是弧度(PI) 如需将角度转换为弧度,请使用 degrees*Math.PI/180 公式进行计算。
这是数学题啊....
Rotate = function(Source,Angle)//Angle为正时逆时针转动, 单位为弧度
{
var A,R
A = Math.atan2(Source.Y,Source.X)//atan2自带坐标系识别, 注意X,Y的顺序
A += Angle//旋转
R = Math.sqrt(Source.X * Source.X + Source.Y * Source.Y)//半径
return {
X : Math.cos(A) * R,
Y : Math.sin(A) * R
}
}
Rotate({X : 0,Y : 4},-Math.PI / 4)
注意, 由於牵扯浮点运算, 所以你如果调用
Rotate({X : 0,Y : 4},Math.PI / 2)
返回可能会是{X: -4, Y: 4.898425415289509e-16}
Y很小但不等於0
当然如果用矩阵变换也是可以写的..