坐标系变换

从一个坐标系变换到另一个坐标系。分别为每个轴指定新的坐标系对应的轴X,-X,Y,-Y,Z,-Z,如X->Y, Y->X,Z->Z。

 QMatrix4x4 translateMat;

    int val = 0;

    // for x component, axis is new component
    for (int i = 0; val = axisX, i < 3; i++)
    {
        if (val == 2 * i)
            translateMat(0, i) = 1.0;
        else if (val == 2 * i + 1)
            translateMat(0, i) = -1.0;
        else
            translateMat(0, i) = 0.0;
    }

    // for y component
    for (int i = 0; val = axisY, i < 3; i++)
    {
        if (val == 2 * i)
            translateMat(1, i) = 1.0;
        else if (val == 2 * i + 1)
            translateMat(1, i) = -1.0;
        else
            translateMat(1, i) = 0.0;
    }
    
    // for z component
    for (int i = 0; val = axisZ, i < 3; i++)
    {
        if (val == 2 * i)
            translateMat(2, i) = 1.0;
        else if (val == 2 * i + 1)
            translateMat(2, i) = -1.0;
        else
            translateMat(2, i) = 0.0;
    }

    // calc new result
    QVector3D pos(ui.edtX->text().toFloat(), ui.edtY->text().toFloat(), ui.edtZ->text().toFloat());
    QQuaternion rot(ui.edtRW->text().toFloat(), ui.edtRX->text().toFloat(), ui.edtRY->text().toFloat(), ui.edtRZ->text().toFloat());

    QVector3D newPos = translateMat * pos;
    QMatrix3x3 newRotMat = translateMat.toGenericMatrix<3, 3>()* rot.toRotationMatrix();
    QQuaternion newRot = QQuaternion::fromRotationMatrix(newRotMat);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值