我有生成div的这段代码。
通过使用矩阵应用css transform属性,我将获得一个多维数据集的三个面,正确对齐div。
问题出在左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);


该代码是有意义的,但是如果有更好的解决方案,请提供帮助。

最佳答案

您正在使用2d变换在3d中旋转。
如果您想要一个优雅的解决方案,则应使用尺寸为4的3d矩阵。
然后,您将使左侧从下侧旋转90度;并将相同的翻译应用于此。

如果要使用2D变换,最好的方法是为每个脸部预先计算2D变换。然后计算所有多维数据集的平移矩阵(只有1个矩阵,您同时移动了所有面)。每个人脸的矩阵将是平移矩阵和人脸矩阵的乘积。 (请记住,这不是可互换的,顺序很重要)

关于javascript - 带有轴刻度的JS/CSS Matrix立方体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14067560/

10-12 00:26
查看更多