首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原点为x和y的缩放和旋转的QT QMatrix4x4矩阵

在Qt中使用QMatrix4x4实现以原点为基准的缩放和旋转操作时,需注意矩阵变换的顺序(从右到左应用,即后调用的变换先作用)。以下是具体实现方法:

1. 基础变换顺序

  • 缩放(Scale):通过scale(x, y, z)函数实现,参数分别表示x、y、z轴的缩放因子。
  • 旋转(Rotate):通过rotate(angle, x, y, z)函数实现,参数为旋转角度(弧度)和旋转轴向量(如绕Z轴旋转时参数为(0, 0, 1))。

2. 构建变换矩阵

若需先旋转后缩放(常见于保持缩放中心为原点),代码示例如下:

代码语言:javascript
复制
QMatrix4x4 matrix;
matrix.rotate(angle, 0, 0, 1); // 绕Z轴旋转angle弧度
matrix.scale(scaleX, scaleY, 1); // 沿X/Y轴缩放

若需先缩放后旋转(缩放以旋转后的坐标系为准),则调整顺序:

代码语言:javascript
复制
matrix.scale(scaleX, scaleY, 1);
matrix.rotate(angle, 0, 0, 1);

3. 关键点说明

  • 原点为中心:默认情况下,rotatescale均以原点(0, 0, 0)为中心进行变换。若需绕其他点旋转,需先用translate将坐标系平移到目标点,旋转后再平移回去。
  • 变换顺序影响结果:例如,先旋转再缩放会导致缩放以旋转后的坐标系为准,而先缩放再旋转则缩放以原点为准。

4. 完整示例

代码语言:javascript
复制
QMatrix4x4 matrix;
matrix.translate(translationX, translationY, translationZ); // 平移(可选)
matrix.rotate(rotationAngle, rotationX, rotationY, rotationZ); // 旋转
matrix.scale(scaleX, scaleY, scaleZ); // 缩放

此矩阵可应用于顶点着色器或图形渲染中,实现平移、旋转、缩放的组合变换。

总结

通过合理控制rotatescale的调用顺序,并明确变换目标(如原点),可精确实现所需的几何变换。具体顺序需根据实际需求调整,例如:

  • 保持缩放中心为原点:先旋转后缩放。
  • 缩放以旋转后的坐标系为准:先缩放后旋转。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

11分2秒

1.13.同x不同y和同y不同x,求私钥

12秒

360度视角电子蜡烛

4分48秒

1.11.椭圆曲线方程的离散点

1分3秒

医院PACS影像信息管理系统源码带三维重建

22分1秒

1.7.模平方根之托内利-香克斯算法Tonelli-Shanks二次剩余

54秒

CS创世SD NAND手工焊接技巧和注意事项

1时22分

Android核心技术:一节课教你 Get 5G时代使用Webview的正确姿势!

7分33秒

058.error的链式输出

14分35秒

Windows系统未激活或key不合适,导致内存只能用到2G

1分46秒

《中国数据库前世今生——00年代数据库分型及国产数据库开端》观后感

381
21分35秒

新知:第二期 音视频直播服务技术趋势以及腾讯音视频方案解析

31分41秒

【玩转 WordPress】腾讯云serverless搭建WordPress个人博经验分享

领券