图形学二维复合变换的问题,请大侠指点一二

hbycylzx 2011-10-18 10:56:16
现在根据需要做出了单纯的平移变换,旋转变换,测试均没有问题。
void CTransform::Rotate(double beta)
{
//旋转变换函数
//beta<0时为顺时针,beta>0是逆时针
double rad = beta*180/PI;
Identity();
T[0][0] = cos(rad);
T[0][1] = sin(rad);
T[1][0] = -sin(rad);
T[1][1] = cos(rad);
MultiplyMatrix();//矩阵乘法
}
void CTransform::Translate(double Tx, double Ty)
{
//平移变换函数
Identity();
T[2][0] = Tx;
T[2][1] = Ty;
MultiplyMatrix();
}
但是将函数整合到一起做成复合变换函数,发现图形不旋转,并且速度与单纯的平移变换也不同。请问这是为什么?

void CTransform::CompoundTransform(double Tx, double Ty, double Beta)
{
//现将中心移至坐标原点然后以坐标原点旋转再平移回去
double rad = Beta*180/PI;
Identity();
T[2][0] = Tx;
T[2][1] = Ty;
MultiplyMatrix();
T1[0][0] = cos(rad);
T1[0][1] = sin(rad);
T1[1][0] = -sin(rad);
T1[1][1] = cos(rad);
MultiplyMatrix();
T2[2][0] = -Tx;
T2[2][1] = -Ty;
MultiplyMatrix();
}
并且中心坐标和图形的点不能同步
...全文
334 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbycylzx 2011-10-23
  • 打赏
  • 举报
回复
问题已经解决了,不是矩阵乘法的问题,是要把参照的点也按照矩阵进行变换,谢谢
散分拉!:)
yisikaipu 2011-10-19
  • 打赏
  • 举报
回复
你没给出MultiplyMatrix()的代码,别人只能合理猜测

MultiplyMatrix()不带参数,显然是用默认的全局的T去乘,每次用前都要重置T

你写个T1,T2,MultiplyMatrix()可认得它们? :)

[Quote=引用 4 楼 hbycylzx 的回复:]

复合变换的矩阵T = T1*T2*T3 才是最后坐标的变换矩阵啊。。。重置干什么?
[/Quote]
kerbcurb 2011-10-19
  • 打赏
  • 举报
回复
你的函数MultiplyMatrix()有问题,应该带参数,你没带,计算机不知道哪个矩阵乘哪个矩阵,因此计算结果不可能正确
lirunfa 2011-10-19
  • 打赏
  • 举报
回复
注意矩阵的左乘或者右乘。 两种乘法的结果不一样。 矩阵乘法不满足交换率
hbycylzx 2011-10-19
  • 打赏
  • 举报
回复
复合变换的矩阵T = T1*T2*T3 才是最后坐标的变换矩阵啊。。。重置干什么?
yisikaipu 2011-10-19
  • 打赏
  • 举报
回复
Identity()肯定是把T初始化或重置为
1000
0100
0010
0001

楼主看来是忘记了重置

但是楼主却用了T1,T2,很奇怪……

[Quote=引用 1 楼 libralibra 的回复:]

Identity();函数是干嘛的?
你是不是把旋转矩阵做好,MultiplyMatri()一次就可以了?
如果要分开,是不是得2次Identity()分别在旋转和平移之前(或者3次,往回移动前也再来一次)
[/Quote]
星羽 2011-10-19
  • 打赏
  • 举报
回复
看看MultiplyMatrix的实现
libralibra 2011-10-19
  • 打赏
  • 举报
回复
Identity();函数是干嘛的?
你是不是把旋转矩阵做好,MultiplyMatri()一次就可以了?
如果要分开,是不是得2次Identity()分别在旋转和平移之前(或者3次,往回移动前也再来一次)
内容概要:本文围绕使用Koopman理论识别机器人动力学的非线性系统展开,提出了一种基于数据驱动的方法,通过Koopman算子将复杂的非线性动力学系统映射到高维线性空间,从而实现对机器人系统动态行为的有效建模与辨识。文中系统阐述了Koopman理论的核心思想、观测函数的设计原则以及动态模式分解(DMD)算法在系统辨识中的具体应用,并结合Matlab代码实现了完整的建模与仿真流程。通过仿真实验验证了该方法在处理强非线性机器人系统时的高精度与鲁棒性,展示了其在模型降阶、状态预测、控制器设计等方面的重要应用价值。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事机器人控制、非线性系统建模、数据驱动控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现对复杂机器人非线性动力学系统的精确建模与辨识;②为先进控制器(如模型预测控制MPC、线性二次型调节器LQR等)提供高质量的线性化模型支撑;③推动数据驱动方法在实际机电系统与智能机器人中的工程化应用。; 阅读建议:读者应结合所提供的Matlab代码进行动手实践,深入理解Koopman观测函数构造、DMD算法实现及参数调优过程,建议在不同类型的非线性系统上复现并改进算法,以全面提升理论认知与实际应用能力。
内容概要:本文围绕基于MATLAB的风力涡轮机雷达信号仿真展开研究,系统构建了风力涡轮机在雷达探测下的信号模型,实现了仿真数据的生成与特征分析,重点探讨风力涡轮机旋转叶片引起的雷达回波调制、微多普勒效应及杂波特性,进而研究其对雷达目标检测与识别造成的电磁干扰机制。文中结合雷达信号处理技术,提出了有效的杂波抑制与信号分离方法,为提升雷达在风电场环境中的探测性能提供理论支持和技术路径。此外,资源还整合了风电功率预测、风光储系统建模、新能源并网等关联领域的MATLAB/Simulink仿真案例,展现了MATLAB在电力系统、新能源与雷达信号交叉学科中的综合应用价值。; 适合人群:具备一定MATLAB编程基础,从事雷达信号处理、新能源系统仿真、电力电子与电力系统、电磁兼容性研究等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于风力涡轮机对雷达系统电磁干扰的建模、仿真分析与教学演示;②为雷达杂波建模、微多普勒特征提取、信号去噪与运动目标检测算法开发提供仿真数据支持;③辅助新能源与雷达系统共存场景下的多物理场耦合仿真与干扰规避策略研究。; 阅读建议:建议结合文中提供的完整MATLAB仿真代码与数据集进行实践操作,重点关注风力涡轮机动态特性与雷达信号调制之间的耦合关系,深入理解微多普勒特征的生成机理,并可拓展学习所附的其他新能源与信号处理仿真案例,以增强跨学科综合仿真与问题解决能力。
内容概要:本文针对风光储共母线微电网在源荷随机扰动下的稳定运行问题,提出了一种分层协调控制策略与储能系统高频低频功率解耦方法,并通过Simulink仿真平台进行系统建模与验证。研究构建了包含风电、光伏与混合储能的微电网系统模型,设计了上层能量管理与下层设备控制相结合的分层控制架构,实现了多源系统的协调调度;同时,为优化储能系统的功率分配与延长其使用寿命,提出了基于分频控制的功率解耦策略,将负荷功率动态划分为高频与低频成分,分别由超电容和蓄电池承担,充分发挥不同储能介质的动态响应特性。研究还通过多种扰动工况下的仿真实验,系统分析了系统的动态响应特性,验证了所提策略在抑制功率波动、提升系统稳定性及改善储能系统运行效率方面的有效性。; 适合人群:具备电力系统、新能源、自动化等相关专业背景,从事微电网、分布式能源系统、储能控制等领域研究的研发人员及研究生。; 使用场景及目标:①掌握微电网分层控制体系的设计原理与实现路径;②深入理解混合储能系统在多源协调控制中的作用机制及基于分频的功率分配策略;③学习并应用Simulink工具开展微电网系统的建模、仿真与控制策略验证,服务于科研项目攻关或工程方案设计。; 阅读建议:此资源结合理论分析与仿真实践,建议读者在理解控制策略与分频解耦原理的基础上,动手搭建Simulink模型,结合参数调试与仿真结果分析,深入掌握微电网协调控制与储能优化运行的关键技术细节。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧