Maj*_*ati 1 qt rotation matrix qml
我正在进行图像变换,我想从x原点和y原点同时缩放和旋转图像.我尝试使用单独的Scale,Rotate但它们同时工作一个.这是我的代码
function setRotation(rotation){
    rt.origin.x=imagQuickitem.anchorPoint.x;
    rt.origin.y=imagQuickitem.anchorPoint.y;
    rt.angle=rotation
    image.transform=rt;
    image.transform=sc;
}
function setScale(scale){
    sc.origin.x=imagQuickitem.anchorPoint.x;
    sc.origin.y=imagQuickitem.anchorPoint.y;
    sc.xScale=scale;
    sc.yScale=scale;
    image.transform=sc;
}
Scale { id:sc; }
Rotation { id:rt; }
好吧,似乎解决方案是QMatrix4x4,我试图使用QMatrix4x4并发现这个链接 Qt变换矩阵, 但我不知道如何编写矩阵以适用于比例和旋转,我应该多个矩阵与旋转矩阵?
到目前为止,我能想到两种解决方案.解决方案1:将旋转与比例相结合.解决方案2:明确计算变换矩阵.请参阅以下代码段:
Image {
    id: img
    source: "Lenna.png"
    property real rotD: 45 // angle (degrees)
    property real rotR:  rotD * Math.PI / 180 // angle (radians)
    property real scale: 2 // scaling value
    property real x0: 264 // origin.x
    property real y0: 264 // origin.y
    // solution 1: combine 2 transforms
    transform: [
        Rotation{origin.x: img.x0; origin.y: img.y0; angle: img.rotD; },
        Scale{origin.x: img.x0; origin.y: img.y0; xScale: img.scale; yScale: img.scale}
    ]
    // solution 2: do the math to calculate the matrix
//    transform: Matrix4x4 {
//    matrix: Qt.matrix4x4(
//        img.scale*Math.cos(img.rotR), -img.scale*Math.sin(img.rotR), 0, -img.scale*Math.cos(img.rotR)*img.x0 + img.scale*Math.sin(img.rotR)*img.y0 + img.x0,
//        img.scale*Math.sin(img.rotR), img.scale*Math.cos(img.rotR),  0, -img.scale*Math.sin(img.rotR)*img.x0 - img.scale*Math.cos(img.rotR)*img.y0 + img.y0,
//        0, 0, 1, 0,
//        0, 0, 0, 1)
//    }
}