【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换

简介: 【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!!

实验四、二维图形的缩放、旋转,平移,组合变换

一、实验目的及要求

基于一个三角形来进行几何变换,包括绘制多边形、XY二维坐标、平移变换、对称变换、缩放变换、旋转变换、错切变换 ,通过实验,熟练掌握图形几何变换的基本思想和基本方法。

二、实验设备

  • Microsoft Visual Studio 2022

三、实验原理

图形几何变换主要涉及以下几种操作:

  • 平移变换:将图形沿着X轴和Y轴方向进行平移。
  • 对称变换:通过某个轴或点对图形进行对称镜像。
  • 缩放变换:按比例调整图形的大小。
  • 旋转变换:围绕某个点或轴旋转图形。
  • 错切变换:沿着X轴或Y轴方向拉伸图形。

四、实验方法与步骤

  1. 算法思想
  • 平移变换:将每个顶点的坐标分别加上平移向量得到新的坐标。
  • 对称变换:根据对称轴或对称点的位置,改变每个顶点的坐标。
  • 缩放变换:将每个顶点的坐标按照比例因子进行缩放计算。
  • 旋转变换:围绕旋转中心点,将每个顶点的坐标按照旋转角度进行计算。
  • 错切变换:根据错切类型和参数,计算每个顶点的新坐标。
  1. 算法步骤
  • 绘制多边形:根据给定的顶点坐标,使用OpenGL库函数进行多边形绘制。
  • XY二维坐标:绘制坐标轴,并在图形上绘制坐标轴上的点。
  • 平移变换:根据给定的平移向量,对图形中的每个顶点坐标进行平移计算。
  • 对称变换:根据给定的对称轴或对称点,对图形中的每个顶点坐标进行对称变换计算。
  • 缩放变换:根据给定的缩放因子,对图形中的每个顶点坐标进行缩放计算。
  • 旋转变换:根据给定的旋转角度和旋转中心点,对图形中的每个顶点坐标进行旋转计算。
  • 错切变换:根据给定的错切类型和参数,对图形中的每个顶点坐标进行错切计算。
  1. 代码
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(); // 刷新缓冲区,将图像显示出来
}

五、实验结果

  1. 绘制多边形,XY二维坐标

  1. 平移变换

  1. 对称变换

  1. 缩放变换

  1. 旋转变换

  1. 错切变换

六、结论

通过本次实验,我掌握了图形几何变换的基本思想和方法,并成功实现了多边形的绘制、平移变换、对称变换、缩放变换、旋转变换和错切变换等操作。这些几何变换可以应用于许多图形设计和计算机图形学领域,为图形的变换和处理提供了强大的工具和技术支持。

相关文章
|
Java
Java @Data 注解详细说明
Data注解是 Lombok 提供的一个组合注解,它会为类自动生成一些常见方法的样板代码,包括 getter、setter、equals、hashCode 和 toString 方法。
3378 5
|
消息中间件 移动开发 JavaScript
JSBridge:混合开发中的双向通信[Android、iOS&JavaScript]
WebView 是移动端中的一个控件,它为 JS 运行提供了一个沙箱环境。WebView 能够加载指定的 url,拦截页面发出的各种请求等各种页面控制功能,JSB 的实现就依赖于 WebView 暴露的各种接口。由于历史原因,IOS以8为分界,Android以4.4为分界,分为高低两个版本。而它们的区别在于 —— 回调。高版本可以通过执行回调拿到 JS 执行完毕的返回值,然后准确进行下一步操作。而低版本无法执行回调!Hybrid App 的核心。
JSBridge:混合开发中的双向通信[Android、iOS&JavaScript]
|
9月前
|
存储 缓存 安全
Python类与实例变量:你真的理解它们的区别吗?
本文深入解析Python中类变量与实例变量的区别,通过20个代码案例详解二者在内存、作用域及生命周期上的差异,涵盖应用场景、常见误区及多线程安全等实战问题,助你掌握面向对象编程核心要点。附免费Python教程链接。
341 0
|
Docker 容器 应用服务中间件
Docker 客户端是如何拉取镜像的?
Docker客户端拉取镜像的过程遵循Docker Registry HTTP API V2规范,主要分为解析镜像名、鉴权、获取Manifest、拉取Layers及本地合并五个步骤。它与Docker Hub、Harbor等仓库通信,确保镜像正确下载和构建。
1742 59
|
算法 图形学
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
1405 2
|
人工智能 数据可视化
关于AI编程对普通人的一个最大的缺点
AI虽擅长编码,但图形界面设计能力较弱,普通人难以通过命令行操作。建议集成可视化UI设计工具,如拖拽组件、精准设尺寸,让AI生成代码,减少反复调试,提升效率。
|
存储 算法 图形学
【计算机图形学】实验二 用扫描线算法实现多边形填充
【计算机图形学】实验二 用扫描线算法实现多边形填充
1409 2
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
算法 图形学
【计算机图形学】实验一 DDA算法、Bresenham算法
【计算机图形学】实验一 DDA算法、Bresenham算法
1582 3