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

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();
}
并且中心坐标和图形的点不能同步
...全文
319 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次,往回移动前也再来一次)
内容概要:本文针对不平衡电网工况下并网变流器分布式电源的多目标最优运行问题,提出了一种基于ANPC三电平并网逆变器的高性能控制策略。通过深度融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建了“精准同步-扰动补偿-优质调制”的一体化控制体系。该策略充分利用ANPC三电平拓扑在开关损耗均衡、中点电位可控及输出谐波低等方面的硬件优势,结合DPWMA调制实现等效开关频率倍增以优化谐波性能,采用正负序分离技术精准提取电网正序分量,确保在电压不平衡条件下的精确锁相与对称并网,同时引入前馈控制提前补偿电网扰动,显著提升系统的动态响应速度与抗扰能力。通过Matlab/Simulink搭建完整仿真模型,在稳态运行、电网不平衡及动态扰动等多种工况下进行验证,结果表明该复合控制策略能有效降低并网电流总谐波畸变率,抑制功率波动,增强系统稳定性,全面满足复杂电网环境下大功率并网设备的高性能运行需求。; 适合人群:具备电力电子与电力系统基础知识,从事新能源发电、智能电网、逆变器控制及电能质量治理等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于新能源发电系统中大功率并网逆变器的高性能控制设计;②解决电网电压不平衡、畸变等复杂工况下的并网稳定性与电能质量问题;③提升并网系统的动态响应能力与多目标优化运行水平,实现高质量、高可靠并网。; 阅读建议:建议结合Matlab/Simulink仿真平台,按照文中所述系统架构与控制逻辑复现仿真模型,重点关注DPWMA调制的实现机制、正负序分离算法的编程细节以及前馈-反馈复合控制器的设计方法,通过对比不同工况下的仿真波形与性能指标,深入理解各控制模块的协同作用机制与优化效果。

65,213

社区成员

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

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