divを生成するこのコードがあります。マトリックスを使用して css 変換プロパティを適用することにより、div を適切に配置して、立方体の 3 つの面を取得します。問題は左側の div にあります。配列 leftArr スケール (d * スケール) を設定すると、一番上の div の左側の div を垂直方向に正しく配置できません。立方体のシミュレーションを取得する最良の方法を教えてください。
ありがとうございました。
CSS:
.face {
height: 50px;
overflow: hidden;
position: absolute;
width: 50px;
}
JS:
var angle = 45,
r = parseFloat(angle) * (Math.PI / 180),
cos_theta = Math.cos(r),
sin_theta = Math.sin(r);
var a = cos_theta,
b = sin_theta,
c = -sin_theta,
d = cos_theta;
var face = 50, //reference to .face class
k = 0,
j = 100; //constant
var scale = 3;
var dX = face * Math.SQRT2 * scale;
var dY = face * Math.SQRT2;
for(var i = 0; i < 3; i++){
var tx = j + k;
var ty = j;
var lx = j + k - dX/4;
var ly = ty;
var topArr = [a * scale, b, c * scale, d, tx, ty];
var leftArr = [a * scale, b, 0, d * scale, lx, ly];
var top = 'matrix(' + topArr.join(',') + ')';
var left = 'matrix(' + leftArr.join(',') + ')';
k += dX;
$('<div/>', {
id : 'top_'+i,
'class' : 'face',
css : {
'background' : 'hsla( ' + parseInt(Math.random() * 90) + ', 100%, 50%, 0.5 )',
'transform' : top
}
}).appendTo('body');
$('<div/>', {
id : 'left_'+i,
'class' : 'face',
css : {
'background' : 'hsla( ' + parseInt(Math.random() * 90) + ', 100%, 50%, 0.5 )',
'transform' : left
}
}).appendTo('body');
}
例:
スケール = 1
スケール = 2
スケール = 3
アップデート:
いくつかのテストの後:
var ly = ty + dY/2 + ( ( (dY/2)*(scale-1) ) / 2);
コードは理にかなっていますが、より良い解決策があれば、助けていただければ幸いです。