mfc在屏幕绘制一任意多边形,完成该多边形的基本几何变换(包括平移、比例、旋转、反射和错切等变换)
时间: 2023-07-31 16:04:21 浏览: 151
在 MFC 中,可以使用 CDC 类来进行图形绘制和几何变换操作。下面是一个示例代码,演示如何绘制一个任意多边形,并进行基本几何变换操作:
```cpp
void DrawPolygon(CDC* pDC, CPoint* pts, int count)
{
// 绘制多边形
pDC->Polygon(pts, count);
// 平移变换
pDC->OffsetViewportOrg(100, 100);
// 缩放变换
pDC->ScaleViewportExt(2, 2, 1, 1);
// 旋转变换
pDC->SetViewportOrg(0, 0);
pDC->SetViewportExt(200, 200);
pDC->SetWindowOrg(100, 100);
pDC->SetWindowExt(200, 200);
pDC->SetViewportOrg(150, 150);
pDC->SetViewportExt(200, 200);
pDC->RotateViewport(45);
// 反射变换
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportExt(200, -200);
// 错切变换
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(200, 200);
pDC->SetViewportExt(200, 200);
pDC->SetViewportOrg(0, 0);
pDC->SetWindowOrg(0, 0);
pDC->ModifyWorldTransform(&XFORM{1, 0, 1, 1, 0, 0}, MWT_LEFTMULTIPLY);
}
```
在这个示例代码中,我们首先使用 `Polygon` 函数绘制了一个任意多边形,然后分别进行了平移、缩放、旋转、反射和错切等几何变换操作。
注意到在进行旋转变换时,我们使用了 `SetViewportOrg`、`SetViewportExt`、`SetWindowOrg` 和 `SetWindowExt` 函数,以便将旋转中心点设置为多边形的中心点,并将坐标系变换到合适的位置。
在反射变换和错切变换中,我们使用了 `SetMapMode` 函数来设置坐标系的映射模式,以便实现反射和错切变换。
最后,在错切变换中,我们使用了 `ModifyWorldTransform` 函数来修改世界变换矩阵,实现任意的错切变换。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)