このサイトをお勧めします: 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>}
です。