如图,我如何计算A和B点旋转后的坐标,以窗体中心点为旋转中心。

解决方案 »

  1.   

    矩阵相乘
    [x,y]*[cos(a),-sin(a)]
           sin(a),cos(a)
      

  2.   

    谢谢您的回答,还有一些不明白的地方:
    比如要旋转点A 坐标为(x轴=50,y轴=30)[x,y]*[cos(a),-sin(a)] x,y是指中心点位置还是点的坐标??上面矩阵相乘的的结果是不是:x*y*cos(a),x*y*-sin(a) ??sin(a),cos(a) 这又是表示什么?以上算出后的结果哪个是旋转后的A点的X轴坐标和Y轴坐标?
      

  3.   


    [x,y]*|cos(a),-sin(a)|
          |sin(a),cos(a) |是矩阵相乘。
    矩阵的第一列相当于单位X轴(1,0)旋转a.
    第二列相当于单位Y轴(0,1)旋转a.
    画直角坐标图就明白了。
      

  4.   

    谢谢楼上的回复,我没有学边矩阵啊,您能不能给个公式,比如 
    ax' = ??????  旋转后A点的X轴坐标等于什么乘以什么
    ay' = ??????  旋转后A点的Y轴坐标等于什么乘以什么
      

  5.   

    我在旋转前把X轴减去原点与中心距离,Y同理,转换后再加上,但结果不对。
    我直接用的你函数以0,0旋转,横线,旋转后成斜线,不知道是不是我不会使用
    我使用的是pntRotate函数,第一和第二个参数是不是要旋转的点坐标啊?如果是那我就是这样传的!请指点!
      

  6.   


    点(x,y)绕坐标原点旋转a度后的坐标(x',y'):x' = x * cosa - y * sina ;
    y' = x * sina + y * cosa ;
      

  7.   

    很久以前写的了,我已经有点忘了,你自己试一下吧,我一般是在ACAD里进行简单的测试,标注坐标,然后旋转。再测试一下使用这个算法能不能够得到相同的答案就行了
      

  8.   

    复数学过吧?旋转theta角度就等于在其方向矢量上乘以复数cos(theta) + i sin(theta)
    要回答你这个问题,首先你需要知道旋转的“原点”是哪里,从原点到A是一个方向矢量,这个方向矢量乘以上面的旋转矢量就是答案
      

  9.   

    用我这个类通过向量的方式处理
    http://download.csdn.net/source/1888166
      

  10.   

    typedef struct tagPoint
    {
    double fX;
    double fY;
    }fPoint;
    fPoint yourClass::rotate(fPoint o,double f_Angle,fPoint p)
    {
    fPoint tp;
    p.fX -=o.fX;
    p.fY -=o.fY;
    tp.fX=p.fX*cos(f_Angle) - p.fY*sin(f_Angle)+o.fX;
    tp.fY=p.fY*cos(f_Angle) + p.fX*sin(f_Angle)+o.fY;
    return tp;
    }记得#include"math.h"