首页
学习
活动
专区
工具
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的调用顺序,并明确变换目标(如原点),可精确实现所需的几何变换。具体顺序需根据实际需求调整,例如:

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

相关·内容

Qt的QChartView实现缩放和放大功能

这里介绍下QChartView缩放和放大功能的实现。  这里介绍下QChartView缩放和放大功能的实现。...QCustomPlot 致力于提供美观的界面,高质量的2D画图、图画和图表,同时为实时数据可视化应用提供良好的解决方案。...(0,0);//背景颜色起始点,从图左上角开始,y方向0~400之间为红色渐变,开始位置为红色 plotGradient.setFinalStop(0,400);//y方向 >400 为绿色渐变...(QPen(Qt::white,3));// x轴线上的主刻度线(有数字的刻度线)的画笔颜色和粗细 customPlot->xAxis->setTickLabelColor(Qt::green)...的博客-CSDN博客_qcustomplot和qchart对比 Qt-Qcustomplot设置并使用双重坐标轴(刻度不同的X、Y轴)_52_赫兹的鲸的博客-CSDN博客 QCustomPlot使用_pzs0221

3.9K40
  • Qt坐标绘图

    坐标系简介 Qt中每一个窗口都有自己的一个坐标系,默认窗口左上角为坐标原点(0,0),然后水平向右依次增大(X轴),垂直向下依次增大(Y轴)。...坐标系变换是利用变换矩阵来进行的,我们可以利用QTransform类来设置变换矩阵,因为一般我们不需要进行更改,所以这里不在涉及。下面我们只是对坐标系的平移,缩放,旋转,扭曲等应用进行介绍。...要想使原来的(0,0)点重新成为原点,就是将(-100,-100)设为原点。 2.2利用scale()函数进行比例变换,实现缩放效果。...因为默认的rotate()函数是以原点为中心进行顺时针旋转的,所以我们要想使其以其他点为中心进行旋转,就要先进行原点的变换。...这里的painter.translate(100,100)将(100,100)设置为新的原点,想让直线以其为中心进行旋转,可是你已经发现效果并非如此。是什么原因呢?

    2K30

    求z=x-y的概率密度_X和Y独立同分布

    ###Z=X+Y型概率密度的求解### @(概率论) Z = g ( X , Y ) Z = g(X,Y) Z=g(X,Y) 总结过一次,一般方法是可以由分布函数再求导得到概率密度,计算一定更要小心才能得到正确的解...设随机变量(X,Y)的概率密度是: f ( x , y ) = { 3 x , 0 x y x , 0 , 其 他 f(x,y) = \begin{cases} 3x,...&0xyx, \\ 0,&其他 \end{cases} f(x,y)={ 3x,0,​0xyx,其他​ 求随机变量Z = X-Y的概率密度 f Z ( z ) f_Z(z...我们以积分变元为横轴,当然也可以是纵轴,只是要熟悉背后的道理。 阴影部分区域是二者互相限制后形成的可积分的区域。...现在不是求二重积分而是一重积分,但是可以用二重积分的思想:认为是对z积分以后现在再对x积分,因此,x的取值是在垂直于z的取值范围内画一条红线,穿过阴影区域的上下限值,因此是(z,1),这才是真正的完整的解法

    1.6K40

    Android Matrix

    ,再假定在x轴和y轴方向移动的大小分别为: ? 如下图所示: ? 不难知道 ? 如果用矩阵来表示的话,就可以写成: ? 旋转变换 2.1 围绕坐标原点旋转: 假定有一个点 ?...,相对坐标原点顺时针旋转 ? 后的情形,同时假定P点离坐标原点的距离为r,如下图 ? 那么, ? 如果用矩阵,就可以表示为: ? 2.2 围绕某个点旋转 如果是围绕某个点 ? 顺时针旋转 ?...,那么可以用矩阵表示为: ? 可以化为: ? 很显然, 1. ? 是将坐标原点移动到点后 ? 后, ? 的新坐标。 2. ? 是将上一步变换后的 ? ,围绕新的坐标原点顺时针旋转 ? 。...缩放变换 理论上而言,一个点是不存在什么缩放变换的,但考虑到所有图像都是由点组成,因此,如果图像在x轴和y轴方向分别放大k1和k2倍的话,那么图像中的所有点的x坐标和y坐标均会分别放大k1和k2倍,即...当k = 0时,即y = 0,也就是对称轴为x轴的情况;当k趋于无穷大时,即x = 0,也就是对称轴为y轴的情况;当k =1时,即y = x,也就是对称轴为y = x的情况;当k = -1时,即y =

    1.6K40

    R语言建模入门:如何理解formula中y~.和y~x:z的含义?

    01 — 如何理解formula中y~.和y~x:z的含义? y~. 和 y~x:z 是一个简单的formula。~和 : 是formula中的运算符,但它们与通常理解的数学运算符存在一定的差距。...- :-表示从模型中移除某一项,y~x-1表示从模型中移除常数项,估计的是一个不带截距项的过原点的回归方程。此外,y~x+0或y~0+x也可以表示不带截距项的回归方程。...对某一变量取对数,可以直接写log(y)~log(x),这一表达式的含义就是估计 ;自然指数同样也可以直接表示为exp();但如果想要表示加减乘除和平方之类,需要用到I()这个运算符。...(←是大写的i不是小写的L) y~x+I(z^2)的含义: y~x+z^2的含义: (因为z没法和自己交互) 那么,y~x+w+z和y~x+I(w+z)有什么区别呢?...y~x+w+z的含义: y~x+I(w+z)的含义: 可以发现,第二个公式将w+z作为一个整体估计这一变量的参数。

    8K31

    坐标系旋转变换公式图解

    有的时候变换可能比较复杂,比如平移之后又旋转,旋转之后又平移,又缩放。 直接用公式计算,不但复杂,而且效率低下。这时可以借助变换矩阵和矩阵乘法,将多个变换合成一个。...下面是3类基本的2D图形变换。 平移: 设某点向x方向移动 dx, y方向移动 dy ,[x,y]为变换前坐标, [X,Y]为变换后坐标。...dx dy 1 旋转: 旋转相比平移稍稍复杂: 设某点与原点连线和X轴夹角为b度,以原点为圆心,逆时针转过a度 , 原点与该点连线长度为R, [x,y]为变换前坐标, [X,Y]为变换后坐标...0 0 1 缩放 设某点坐标,在x轴方向扩大 sx倍,y轴方向扩大 sy倍,[x,y]为变换前坐标, [X,Y]为变换后坐标。...比如某个变换,先经过平移,对应平移矩阵A, 再旋转, 对应旋转矩阵B,再经过缩放,对应缩放矩阵C. 则最终变换矩阵 T = ABC.

    6K20

    实验4 二维几何变换

    实验文档中(20分钟); (2) 使用glRotatef()函数,实现图形旋转,并结合glRotatef()函数的不同参数输入,实现x,y和z方向的旋转,将测试结果存为图4-6,与对应修改的旋转函数代码一起保存至...word实验文档中(20分钟); (3) 使用glScalef()函数,实现图形缩放,并结合glScalef()函数的不同参数输入,实现x,y和z方向的旋转,将测试结果存为图7-9,与对应修改的缩放函数代码一起保存至...theta,vx,vy,vz指定这个旋转物体的矩阵,物体将围绕(0,0,0)到(x,y,z)的直线以逆时针旋转,参数theta表示旋转的角度。...缩放矩阵构造函数为glScale(sx, sy, sz),作用是把当前矩阵和一个表示缩放物体的矩阵相乘。...sx,sy,sz指定这个缩放物体的矩阵,分别表示在x,y,z方向上的缩放比例,它们可以是任意的实数值,当缩放参数为负值时,该函数为反射矩阵,缩放相对于原点进行,后缀为f(单精度浮点float)或d(双精度浮点

    1.1K20

    Android自定义View【实战教程】6⃣️---深入理解 Android 中的 Matrix

    所以在平面中,点是一对x,y值组成的,p = {x, y}。线段是由两点之间的直线组成,e = {p1, p2}。图形是由众多的点和点之间的的线段组成的。...以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为p’ = m1*p+ m2(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(m1旋转缩放矩阵, m2为平移矩阵...如果用矩阵来表示的话,就可以写成: ? Scale (缩放) 如果图像在x轴和y轴方向分别放大k1和k2倍的话,那么图像中的所有点的x坐标和y坐标均会分别放大k1和k2倍: ? 用矩阵表示就是: ?...Rotate(旋转) 假定有一个点 ,相对坐标原点顺时针旋转后的情形,同时假定P点离坐标原点的距离为r: ? 如果用矩阵,就可以表示为: ?...Scale (缩放) 图像在x轴和y轴方向分别放大0.5倍,如图: ?

    78810

    Direct3D 11 Tutorial 5: 3D Transformation_Direct3D 11 教程5:3D转型

    通过与矩阵相乘来执行变换。 通常有三种类型的原始变换可以在顶点上执行:平移(相对于原点位于空间中),旋转(相对于x,y,z帧的方向)和缩放(距离 起源)。...图1.平移的影响 ? 在3D中,空间通常由原点和来自原点的三个唯一轴定义:X,Y和Z.计算机图形中通常使用多个空间:对象空间,世界空间,视图空间,投影空间和屏幕空间。...图2.在对象空间中定义的立方体 ? 旋转 旋转是指围绕穿过原点的轴旋转顶点。 三个这样的轴是空间中的X,Y和Z轴。 2D中的示例是逆时针旋转矢量[1 0] 90度。 旋转的结果是向量[0 1]。...0 0 1 图6显示了围绕Y轴旋转以原点为中心45度的立方体的效果。...围绕X,Y和Z轴执行的旋转分别使用函数XMMatrixRotationX,XMMatrixRotationY和XMMatrixRotationZ来完成。 它们创建围绕主轴之一旋转的基本旋转矩阵。

    1.8K40

    实验3 OpenGL几何变换

    旋转矩阵构造函数为glRotate(theta, vx, vy, vz),作用是把当前矩阵和一个表示旋转物体的矩阵相乘。...theta, vx, vy, vz指定这个旋转物体的矩阵,物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋转,参数theta表示旋转的角度。...缩放矩阵构造函数为glScale(sx, sy, sz),作用是把当前矩阵和一个表示缩放物体的矩阵相乘。...sx, sy,sz指定这个缩放物体的矩阵,分别表示在x,y,z方向上的缩放比例,它们可以是任意的实数值,当缩放参数为负值时,该函数为反射矩阵,缩放相对于原点进行,后缀为f(单精度浮点float)或d(双精度浮点...注意这里都是说“把当前矩阵和一个表示移动旋转, 缩放>物体的矩阵相乘”,而不是直接说“这个函数就是旋转”或者“这个函数就是移动”,这是有原因的,马上就会讲到。

    1.2K20

    OpenGL渲染流水线之世界矩阵,相机变换矩阵,透视投影变换矩阵

    OpenGL的矩阵和向量结合方式 OpenGL的向量为列向量,矩阵和向量采用的方式为“矩阵X列向量”的方式,而D3D11为"行向量X矩阵"的方式。OpenGL的向量矩阵结合如下所示: ?...,旋转矩阵,平移矩阵构成的 (1)缩放矩阵 (ScaleMatrix) 假设在X轴缩放Sx倍,在Y轴缩放Sy倍,在Z轴缩放Sz倍,缩放如下所示: ?...顶点乘以矩阵的公式如下: ? (2)旋转矩阵 在说明旋转矩阵之前,我得说明一下,在右手坐标系如何判断哪个方向为顺时针方向旋转。...先来看下面的图,我们先用右手的拇指朝向Y的正方向,则四指所绕的方向也就是饶Y轴渲染的顺时针方向了,其它轴的顺时针方向同理也就是这样判断。 ? 一,绕X轴顺时针旋转Θ度数 ?...n为原点到近截面的距离,f为原点到远截面的距离,α为视截体在YZ平面投影的FOV视角,r为投影平面的宽高比,则透视投影矩阵为: ?

    1.4K50

    Android 图形处理 —— Matrix 原理剖析

    1,其余为 0 的矩阵,也叫单位矩阵,一般数学上表示为 I Matrix 坐标变换原理 前面说到 Matirx 主要的作用就是处理坐标的变换,而坐标的基本变换有:平移、缩放、旋转和错切 这里所说的基本变换...= BA 单位矩阵 I 与任意矩阵相乘,等于矩阵本身,即 IA = A,BI = B 缩放(Scale) 我们先想想,让我们实现把一个点 (x0, y0) 的 x 轴和 y 轴分别缩放 k1 和 k2...,这里涉及一些三角函数的计算,忘记的可以去维基百科 先复习下 image.png image.png 同样我们先自己实现一下旋转,假设一个点 A(x0, y0), 距离原点的距离为 r,与水平夹角为 α...,现绕原点顺时针旋转 θ 度,旋转之后的点为 B(x, y) image.png 用矩阵表示 image.png image.png Matrix 复合操作原理 前面介绍了四种基本变换,如果我们需要同时应用上多种变化...,比如先绕原点顺时针旋转 90° 再 x 轴平移 100,y 轴平移 100, 最后 x、y 轴缩放0.5 倍,那么就需要用到复合操作 还是先用自己的实现来实现一下 x = ((x0 · cosθ -

    1.4K30

    游戏开发中的矩阵与变换

    游戏开发中的矩阵与变换 介绍 矩阵组件和恒等矩阵 缩放转换矩阵 旋转变换矩阵 变换矩阵的基础 翻译转换矩阵 全部放在一起 剪切变换矩阵(高级) 转换的实际应用 在转换之间转换位置 相对于自身移动对象...变换在大多数情况下都以平移,旋转和缩放的形式应用,因此我们将重点介绍如何用矩阵表示那些变换。...矩阵组件和恒等矩阵 单位矩阵表示没有平移,旋转和缩放的变换。让我们从身份矩阵及其组成与视觉外观的关系开始。 矩阵具有行和列,并且转换矩阵具有关于每个函数的特定约定。...无论您在哪里完成旋转,向量的方向都会确定矩阵是什么。 我们需要在法线坐标中表示“下”和“左”,所以这意味着我们将X设置为(0,1),将Y设置为(-1,0)。...变换矩阵的基础 到目前为止,我们只使用了x和y向量,它们负责表示旋转,缩放和/或剪切(高级,最后进行了介绍)。X和Y向量一起称为变换矩阵的基础。术语“基础”和“基础向量”很重要。

    1.6K20
    领券