要求:1.给定窗口中绘制坐标系
2.给定坐标系内绘制三角形
3.完成平移、旋转等变换后的三角形绘制
4.采用OpenGL绘制

代码:
#include<windows.h>
#include <GL/glut.h>
#include <stdlib.h>
#include<iostream>
#include<cmath>
#include<math.h>
using namespace std;
GLfloat a, b, n;
GLdouble c;class wcPt2D
{public:GLfloat x, y;
};
typedef GLfloat Matrix3x3[3][3];
Matrix3x3 matComposite;
const GLdouble pi = 3.1415926;
void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);
}
void matrix3x3SetIdentity(Matrix3x3 matIdent3x3)
{GLint row, col;for (row = 0; row < 3; row++)for (col = 0; col < 3; col++)matIdent3x3[row][col] = (row == col);}void matrix3x3PreMultiply(Matrix3x3 m1, Matrix3x3 m2)
{GLint row, col;Matrix3x3 matTemp;for (row = 0; row < 3; row++)for (col = 0; col < 3; col++)matTemp[row][col] = m1[row][0] * m2[0][col] + m1[row][1] * m2[1][col] + m1[row][2] * m2[2][col];for (row = 0; row < 3; row++)for (col = 0; col < 3; col++)m2[row][col] = matTemp[row][col];
}void input()
{cout << "输入想要平移变换的距离x,y值(浮点数形式)  :";cin >> a >> b;cout << "输入想要旋转变换的角度c值(60度即60.0)  :";cin >> n;
}
void Translate(GLfloat tx, GLfloat ty)
{Matrix3x3 matTransl;matrix3x3SetIdentity(matTransl);matTransl[0][2] = tx;matTransl[1][2] = ty;matrix3x3PreMultiply(matTransl, matComposite);
}
void Rotate(wcPt2D pivotPt, GLfloat theta)
{Matrix3x3 matRot;matrix3x3SetIdentity(matRot);matRot[0][0] = cos(theta);matRot[0][1] = -sin(theta);matRot[0][2] = pivotPt.x * (1 - cos(theta)) + pivotPt.y * sin(theta);matRot[1][0] = sin(theta);matRot[1][1] = cos(theta);matRot[1][2] = pivotPt.y * (1 - cos(theta)) - pivotPt.x * sin(theta);matrix3x3PreMultiply(matRot, matComposite);
}void transformVerts2D(GLint nVerts, wcPt2D* verts)
{GLint k;GLfloat temp;for (k = 0; k < nVerts; k++){temp = matComposite[0][0] * verts[k].x + matComposite[0][1] * verts[k].y + matComposite[0][2];verts[k].y = matComposite[1][0] * verts[k].x + matComposite[1][1] * verts[k].y + matComposite[1][2];verts[k].x = temp;}
}void draw_triangle(wcPt2D* verts)
{glShadeModel(GL_SMOOTH);GLint k;glBegin(GL_TRIANGLES);for (k = 0; k < 3; k++)glVertex2f(verts[k].x, verts[k].y);glEnd();
}void display(void)
{GLint nVerts = 3;wcPt2D verts[3] = { {50.0,25.0},{150.0,25.0},{100.0,100.0} };wcPt2D centroidPt;GLint k, xSum = 0, ySum = 0;for (k = 0; k < nVerts; k++){xSum += verts[k].x;ySum += verts[k].y;}centroidPt.x = GLfloat(xSum) / GLfloat(nVerts);centroidPt.y = GLfloat(ySum) / GLfloat(nVerts);wcPt2D pivPt, fixedPt;pivPt = centroidPt;fixedPt = centroidPt;GLfloat tx = a, ty = b;c = 180.0 / n;GLfloat theta = pi / c;glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0, 0.0, 1.0);draw_triangle(verts);matrix3x3SetIdentity(matComposite);Translate(tx, ty);Rotate(pivPt, theta);transformVerts2D(nVerts, verts);glColor3f(1.0, 1.0, 1.0);draw_triangle(verts);glFlush();
}void reshape(GLint newWidth, GLint newHeight)
{glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 225.0, 0.0, 225.0);//调整裁剪窗口glClear(GL_COLOR_BUFFER_BIT);
}
int main(int argc, char** argv)
{input();glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 50);glutInitWindowSize(600, 600);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;
}

初学计算机图形学——OpenGL实现二维图形平移,旋转(不使用opengl自带的函数,齐次方程实现)相关推荐

  1. 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...

    计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...

  2. 计算机图形学实验一(二维图形绘制)

    计算机图形学实验一(二维图形绘制) 一.实验内容 二.实验环境 三.问题分析 四.算法设计 五.源代码 六.程序运行结果 一.实验内容 (1)绘制金刚石图案 金刚石图案的成图规则是:把一个圆周等分成n ...

  3. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码

    [计算机图形学]3-2 二维几何变换基本代码 返回目录 基本理论参见:[计算机图形学]3-1 二维几何变换基本理论 注:这里不考虑插值的问题. 全部的代码都在https://github.com/Cy ...

  4. 计算机图形学10:二维观察之线的裁剪

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

  5. 计算机图形学11:二维观察之多边形的裁剪

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

  6. 计算机图形学 学习笔记 二维几何变换

    应用于对象几何描述并改变它的位置.方向或大小的操作称为几何变换. 几何变换有时也称为建模变换.建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等.另一方面,几何变换能用来描述动画 ...

  7. 二维图形平移变换c语言程序,[转载]计算机图形学Opengl实现二维图形的平移、旋转、缩放复合变换...

    参考课堂教学中关于模型变化的讲解,编写对一个三角形分别实现平移.缩放.旋转等变化的源码及效果图.请以该例为蓝本,实现3题的代码编写. 如下的几幅图,第一幅就是在给出的代码部分进行修改,将GL_FLAT ...

  8. 计算机图形学二维图形基本变换实验原理,江苏大学-计算机图形学第三次实验报告-二维图形变换...

    <江苏大学-计算机图形学第三次实验报告-二维图形变换>由会员分享,可在线阅读,更多相关<江苏大学-计算机图形学第三次实验报告-二维图形变换(13页珍藏版)>请在人人文库网上搜索 ...

  9. 图形学 ---- 二维几何变换(二维图形矩阵平移,旋转,缩放)

    二维图形几何变换,矩阵计算 前言:对于一个图形的几何变换,对应的是操作到图形中的每一个点! 即对每一个点做出相应的几何变换.比如平移,就是对二维图形的每个点都平移相同的距离:旋转则是对每一个点,基于基 ...

最新文章

  1. 说说初用 Mock 工具测试碰到的坑
  2. 高考成绩接近满分,却被清华北大拒绝,被称“中国最帅科学家”
  3. 关于网页授权的两种scope的区别说明
  4. 【Spring】Spring xml 名称和别名
  5. Sql Server之旅——第十二站 sqltext的参数化处理
  6. unity3D---鼠标、键盘输入
  7. SpringMVC由浅入深day01_1springmvc框架介绍
  8. Visual Studio附加调试进程时找不到
  9. 签到界面加图片java_签到功能实现,没有你想的那么复杂(二)
  10. php读写明华读卡器,rwCard 明华USBIC卡读卡器IC卡读写程序 - 下载 - 搜珍网
  11. 住建部印发《全国建筑设计周期定额》——建设和设计单位“不得压缩”设计周期...
  12. python教师管理系统,Python面向对象实战:学生教师信息管理(3)
  13. 网络故障和网络诊断工具(5.0)
  14. 7-7 词典 (15 分)
  15. php7hugepage,HugePage简介和KVM中使用HugePage
  16. python 使用图形化界面tkinter显示图片 规定大小!
  17. MT7687芯片资料MT7687原理图资料
  18. 正态分布,最大值是多少,就是两边的极值?
  19. 深度学习环境配置(GPU、CPU版本)
  20. 2022年第十三届蓝桥杯省赛B组python 试题F:消除游戏

热门文章

  1. 管理学十二(流程与制度的重要性)
  2. matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方式
  3. 计算机信息安全四大要素,信息安全四大要素-信息安全包括四大要素
  4. 便携式明渠流量计比对装置--执行的标准规范
  5. gb18030编码格式了解和应用
  6. java u盘_Java检测Windows的U盘插入详解
  7. c# 向Excel文件写入数据(Workbook 和Worksheet )
  8. 如何制订工作计划与工作目标?
  9. Spring源码构建项目,导入eclipse后,缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar的解决办法
  10. html 复选框 不能编辑,javascript-jqGrid-复选框编辑无法编辑所选行