我向您推荐这个网站:http ://www.useragentman.com/blog/2011/01/07/css3-matrix-transform-for-the-mathematically-challenged/尤其是“关于矩阵的其他有趣事实”部分“……
但正如 Egor Nepomnyaschih 指出的那样,您只需要为每个转换实现微积分并将它们链接起来。
我已经根据您的示例实现了一个 jsFiddle:http: //jsfiddle.net/pvS8X/3/。
请注意:原点是您的图形的中间!如果你想引用左上角,你必须设置这是你的 CSS 代码:
transform-origin: 0 0;
参看。https://developer.mozilla.org/fr/docs/CSS/transform-origin。
主要方法是这些:
function skew(p, alpha, beta) {
var tan_a = Math.tan(alpha * Math.PI / 180),
tan_b = Math.tan(beta * Math.PI / 180),
p_skewed = {};
p_skewed.x = p.x + p.y * tan_a;
p_skewed.y = p.x * tan_b + p.y;
return p_skewed;
}
function rotate(p, theta) {
var sin_th = Math.sin(theta * Math.PI / 180),
cos_th = Math.cos(theta * Math.PI / 180),
p_rot = {};
p_rot.x = p.x * cos_th - p.y * sin_th;
p_rot.y = p.x * sin_th + p.y * cos_th;
return p_rot;
}
function scale(p, sx, sy) {
var p_scaled = {};
p_scaled.x = p.x * sx;
p_scaled.y = p.y * sy;
return p_scaled;
}
其中 p 是表单上的一个对象{ x: <some_horizontal_pos>, y: <some_vertical_pos>}
。