使用C++實現圖形的旋轉、縮放、平移


編譯環境:VS2017

編譯框架:MFC

實驗內容:顯示一個三角形,並將其繞中心進行旋轉、縮放以及平移等操作

實驗步驟:

  1.打開VS2017,並創建MFC項目具體方法參見:http://www.cnblogs.com/junjunjun123/p/8811150.html

  2.在新建的執行程序中加入如下代碼

 

void CMFCApplication10View::Ontransfor()
{
    // TODO: 在此添加命令處理程序代碼
    CDC *pDC = GetDC();
    double Q = 15;                    //順時針旋轉角度(單位為度)
    double c = 0.5, d = 0.5;            //x,y縮放倍數
    double e = 100, f = 0;            //x,y平移量
    //轉換為弧度 
    Q = Q / 180 * 3.1415926;
    //初始三角形
    CPoint pts[3];
    //幾何變換后的三角形
    CPoint zf[3];
    //存放臨時的初始坐標
    double TJ[3];
    //存放臨時的轉換后的坐標
    double SX[3];
    //給坐標點賦初始值 
    pts[0].x = 100, pts[0].y = 50;
    pts[1].x = 300, pts[1].y = 50;
    pts[2].x = 200, pts[2].y = 100;
    //計算三角形的中心坐標(a,b)
    double a = (pts[0].x + pts[1].x + pts[2].x) / 3;
    double b = (pts[0].y + pts[1].y + pts[2].y) / 3;
    //復合變換矩陣,將設置的幾何變換參數綜合到此變換矩陣中
    double R[3][3] =
    { { c*cos(Q)  ,          d*sin(Q) ,                0 },
    { -c * sin(Q) ,          d*cos(Q),                 0 },
    { c*(-a*cos(Q)+b*sin(Q))+a+e,d*(-a*sin(Q)-b*cos(Q))+b+f,1 }}; 
    for (int i = 0; i<3; i++)        //i表示三角形的第i個點
    {

        TJ[0] = pts[i].x;
        TJ[1] = pts[i].y;
        TJ[2] = 1;
        for (int j = 0; j<3; j++)        //j表示矩陣的第j列
        {
            SX[j] = TJ[0] * R[0][j] + TJ[1] * R[1][j] + TJ[2] * R[2][j];
        }
        zf[i].x = SX[0];
        zf[i].y = SX[1];
    }
    //輸出初始的圖形
        pDC->Polygon(pts, 3);
    //輸出集合變換后的圖形
        pDC->Polygon(zf, 3);
}

 

  另有在VS2017中無需加上 #include "math.h" ,其他版本可能需要加上

  3.運行結果如下:效果為三角形沿其中心縮小為其原來的1/2,再以其中心為原點順時針旋轉15度,最后向右平移100個像素點(參見代碼)

  

原創聲明:此博客為作者原創,歡迎轉載,轉載時請指明出處,作者:我有點帥哦http://www.cnblogs.com/junjunjun123/p/9011952.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM