资源简介
支持二维和三维图形的几何变换代码,变换包括平移、旋转、对称、投影、错切等
代码片段和文件信息
#include “二维几何变换.h“
#include “三维几何变换.h“
#include
#include
using namespace std;
struct point //建立点结构体
{
float x;
float y;
};
struct tpoint //建立三维点结构体
{
float x;
float y;
float z;
};
int edge = 0; //用于记录多边形的边数
point *points; //用于存储点的信息
point *_points;//用户存储变化后点的信息
tpoint *tpoints;//存储三维点的信息
tpoint *_tpoints;//存储变化后三维点的信息
void Run()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(0.0 0.0 0.0);
glVertex2i(-800 0);
glVertex2i(800 0);
glVertex2i(0 -600);
glVertex2i(0 600);
glEnd();
glLineWidth(3);
glColor3f(0.0 1.0 0.0);
glBegin(GL_LINES);
for (int i = 1; i < edge; i++)
{
glVertex2i(points[i - 1].x points[i - 1].y);
glVertex2i(points[i].x points[i].y);
}
glVertex2i(points[edge - 1].x points[edge - 1].y);
glVertex2i(points[0].x points[0].y);
glColor3f(1.0 0.0 0.0);
for (int i = 1; i < edge; i++)
{
glVertex2i(_points[i - 1].x _points[i - 1].y);
glVertex2i(_points[i].x _points[i].y);
}
glVertex2i(_points[edge - 1].x _points[edge - 1].y);
glVertex2i(_points[0].x _points[0].y);
glEnd();
glFlush();
}
void initial(void)
{
glClearColor(1.0 1.0 1.0 0.0);
//窗口的背景颜色设置为白色
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-800.0 800.0 -600.0 600.0);
}
void glut(int argc char* argv)
{
glutInit(&argc &argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(200 100);
glutInitWindowSize(800 600);
glutCreateWindow(“几何变换“);
initial();
glutDisplayFunc(Run);
glutMainLoop();
}
void main(int argc char* argv)
{
cout << “指定模式(二维,三维):“;
string mode;
cin >> mode;
if (mode == “二维“)
{
cout << “请指定多边形的边数:“;
edge = 0;
cin >> edge;
points = new point[edge];
_points = new point[edge];
cout << “注:以下输入坐标均以空格间隔,绘制窗口大小为800*600“ << endl;
for (int i = 0; i < edge; i++)
{
cout << “请输入第“ << i + 1 << “个顶点的xy:“;
cin >> points[i].x;
cin >> points[i].y;
}
/*points[0].x = 100; points[0].y = 100;
points[1].x = 100; points[1].y = 200;
points[2].x = 200; points[2].y = 200;*/
//glut(argc argv);
for (int i = 0; i < edge; i++)
{
_points[i] = points[i];
}
int choice;
cout << “0、不变换“ << endl << “1、平移“ << endl << “2、旋转“ << endl << “3、缩放“ << endl << “4、对称“ << endl << “5、错切“ << endl;
cout << “请选择变换类型:“;
cin >> choice;
string type;
switch (choice)
{
default:
cout << “输入有误!“ << endl;
return;
break;
case 0: break;
case 1:
float xi yi;
cout << “请输入x方向平移量:“;
cin >> xi;
cout << “请输入y方向平移量:“;
cin >> yi;
for (int i = 0; i < edge; i++)
Translation(_points[i].x _points[i].y xi yi);
break;
case 2:
float a;
cout << “请输入旋转角度(逆时针为正):“;
cin >> a;
for (int i = 0; i < edge; i++)
Rotation(_points[i].x _points[i].y a);
break;
case 3:
float Sx Sy;
cout << “请输入x方向缩放量:“;
cin >> Sx;
cout << “请输入y方向缩放量:“;
cin >> Sy;
for (int i = 0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 99328 2017-11-29 16:55 变换\Debug\变换.exe
文件 527888 2017-11-29 16:55 变换\Debug\变换.ilk
文件 789504 2017-11-29 16:55 变换\Debug\变换.pdb
文件 363520 2017-11-29 16:55 变换\变换\Debug\vc120.idb
文件 364544 2017-11-29 16:55 变换\变换\Debug\vc120.pdb
文件 365 2017-03-26 21:20 变换\变换\Debug\变换.Build.CppClean.log
文件 3197 2017-11-29 16:55 变换\变换\Debug\变换.log
文件 246095 2017-11-29 16:55 变换\变换\Debug\变换.obj
文件 1266 2017-11-29 16:55 变换\变换\Debug\变换.tlog\cl.command.1.tlog
文件 11614 2017-11-29 16:55 变换\变换\Debug\变换.tlog\CL.read.1.tlog
文件 910 2017-11-29 16:55 变换\变换\Debug\变换.tlog\CL.write.1.tlog
文件 2258 2017-11-29 16:55 变换\变换\Debug\变换.tlog\li
文件 5566 2017-11-29 16:55 变换\变换\Debug\变换.tlog\li
文件 874 2017-11-29 16:55 变换\变换\Debug\变换.tlog\li
文件 198 2017-11-29 16:55 变换\变换\Debug\变换.tlog\变换.lastbuildstate
文件 1525 2017-03-26 21:22 变换\变换\三维几何变换.h
文件 1057 2017-03-26 21:17 变换\变换\二维几何变换.h
文件 7542 2017-11-29 16:56 变换\变换\变换.cpp
文件 4216 2017-03-25 16:43 变换\变换\变换.vcxproj
文件 1178 2017-03-25 16:43 变换\变换\变换.vcxproj.filters
文件 32505856 2017-11-29 16:56 变换\变换.sdf
文件 964 2017-03-22 20:59 变换\变换.sln
..A..H. 25088 2017-11-29 16:56 变换\变换.v12.suo
目录 0 2017-11-29 16:55 变换\变换\Debug\变换.tlog
目录 0 2017-11-29 16:55 变换\变换\Debug
目录 0 2017-03-26 21:22 变换\Debug
目录 0 2017-11-29 16:56 变换\变换
目录 0 2017-11-29 16:56 变换
----------- --------- ---------- ----- ----
34964553 28
............此处省略1个文件信息
评论
共有 条评论