😘欢迎关注:👍点赞🙌收藏✍️留言
🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!!
实验四、二维图形的缩放、旋转,平移,组合变换
一、实验目的及要求
基于一个三角形来进行几何变换,包括绘制多边形、XY二维坐标、平移变换、对称变换、缩放变换、旋转变换、错切变换 ,通过实验,熟练掌握图形几何变换的基本思想和基本方法。
二、实验设备
- Microsoft Visual Studio 2022
三、实验原理
图形几何变换主要涉及以下几种操作:
- 平移变换:将图形沿着X轴和Y轴方向进行平移。
- 对称变换:通过某个轴或点对图形进行对称镜像。
- 缩放变换:按比例调整图形的大小。
- 旋转变换:围绕某个点或轴旋转图形。
- 错切变换:沿着X轴或Y轴方向拉伸图形。
四、实验方法与步骤
- 算法思想
- 平移变换:将每个顶点的坐标分别加上平移向量得到新的坐标。
- 对称变换:根据对称轴或对称点的位置,改变每个顶点的坐标。
- 缩放变换:将每个顶点的坐标按照比例因子进行缩放计算。
- 旋转变换:围绕旋转中心点,将每个顶点的坐标按照旋转角度进行计算。
- 错切变换:根据错切类型和参数,计算每个顶点的新坐标。
- 算法步骤
- 绘制多边形:根据给定的顶点坐标,使用OpenGL库函数进行多边形绘制。
- XY二维坐标:绘制坐标轴,并在图形上绘制坐标轴上的点。
- 平移变换:根据给定的平移向量,对图形中的每个顶点坐标进行平移计算。
- 对称变换:根据给定的对称轴或对称点,对图形中的每个顶点坐标进行对称变换计算。
- 缩放变换:根据给定的缩放因子,对图形中的每个顶点坐标进行缩放计算。
- 旋转变换:根据给定的旋转角度和旋转中心点,对图形中的每个顶点坐标进行旋转计算。
- 错切变换:根据给定的错切类型和参数,对图形中的每个顶点坐标进行错切计算。
- 代码
void drawPolygon() { glColor3f(0.0, 0.0, 0.0); // 设置颜色为黑色 glBegin(GL_POLYGON); // 绘制多边形 for (int i = 0; i < n; ++i) { glVertex2f(vertices[i][0], vertices[i][1]); // 添加多边形顶点 } glEnd(); } void drawAxes() { glColor3f(0.0, 0.0, 0.0); // 设置颜色为黑色 glBegin(GL_LINES); // 绘制线段 glVertex2f(-250, 0); // X轴起点 glVertex2f(250, 0); // X轴终点 glVertex2f(0, -250); // Y轴起点 glVertex2f(0, 250); // Y轴终点 glEnd(); } void translate(float tx, float ty) { for (int i = 0; i < n; ++i) { vertices[i][0] += tx; // 平移x坐标 vertices[i][1] += ty; // 平移y坐标 } } void reflectX() { for (int i = 0; i < n; ++i) { vertices[i][1] = -vertices[i][1]; // 关于X轴反射 } } void reflectY() { for (int i = 0; i < n; ++i) { vertices[i][0] = -vertices[i][0]; // 关于Y轴反射 } } void scale(float sx, float sy) { for (int i = 0; i < n; ++i) { vertices[i][0] *= sx; // 缩放x坐标 vertices[i][1] *= sy; // 缩放y坐标 } } void rotate(float angle) { float theta = angle * M_PI / 180.0; // 角度转弧度 for (int i = 0; i < n; ++i) { float x = vertices[i][0]; float y = vertices[i][1]; vertices[i][0] = x * cos(theta) - y * sin(theta); // 绕原点旋转 vertices[i][1] = x * sin(theta) + y * cos(theta); } } void shear(float shx, float shy) { for (int i = 0; i < n; ++i) { float x = vertices[i][0]; float y = vertices[i][1]; vertices[i][0] = x + shx * y; // 剪切x坐标 vertices[i][1] = y + shy * x; // 剪切y坐标 } } void display() { glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区 glColor3f(1.0, 1.0, 1.0); // 设置绘制颜色为白色 drawAxes(); // 绘制坐标轴 drawPolygon(); // 绘制多边形 glFlush(); // 刷新缓冲区,将图像显示出来 }
五、实验结果
- 绘制多边形,XY二维坐标
- 平移变换
- 对称变换
- 缩放变换
- 旋转变换
- 错切变换
六、结论
通过本次实验,我掌握了图形几何变换的基本思想和方法,并成功实现了多边形的绘制、平移变换、对称变换、缩放变换、旋转变换和错切变换等操作。这些几何变换可以应用于许多图形设计和计算机图形学领域,为图形的变换和处理提供了强大的工具和技术支持。