編譯環境: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