设为首页 加入收藏

TOP

c++ 复数控制向量旋转
2014-02-14 12:51:55 来源: 作者: 【 】 浏览:166
Tags:  复数 控制 向量 旋转

  std::complex 复数可以很方便的做旋转

  以下为实现:

  //待旋转的点坐标 (fRotationX,fRotationY)

  //中心点坐标 (fCenterX, fCenterY)

  //旋转角度

  void Rotation(float &fRotationX, float &fRotationY,float fCenterX, float fCenterY,double fAngle)

  {   // 注意标准坐标和屏幕坐标的区别:

  //      标准坐标:y 轴正向向上;x 轴正向向右;角度逆时针增大

  //      屏幕坐标:y 轴及角度方向与标准坐标相反!

  // 转换为标准坐标

  std::complex<DOUBLE> c(fRotationX,-fRotationY);

  std::complex<DOUBLE> cCenter(fCenterX,-fCenterY);

  // 先将坐标原点移动到旋转中心

  c -= cCenter;

  // 旋转(注意:标准坐标方向和屏幕相反)

  //std::polar 提供一对表示复数幅度和角度的极坐标,并返回对应的复数

  //(fAngle * a)/180.0f 角度转弧度

  //std::arg(c)  返回复数的相角

  // std::abs(c)   返回复数的模

  std::complex<DOUBLE> cNew = std::polar(std::abs(c),std::arg(c) - (fAngle * a)/180.0f);

  //// 恢复坐标原点

  fRotationX = cNew.real() + fCenterX;

  fRotationY = -cNew.imag() + fCenterY;       // 注意:恢复纵坐标符号

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇提交无数次WA的一道模拟题 下一篇一个n*n的图是否能由十字架拼成

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)