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; }
Run Code Online (Sandbox Code Playgroud)
好吧,似乎解决方案是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)
// }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |