开发环境:

VC++6.0,OpenGL

实验内容:

  绘制钻石图案。将一圆周进行n等分,然后将所有的等分用直线连接,构成图案。

  n=8
  q =2*p/n
  X=2*r*cos(q)
  Y=r*sin(q)

实验结果:

代码:

  1 #include <windows.h>
  2 #include <gl/gl.h>
  3 #include <stdio.h>
  4
  5 #define PI acos(-1.0)
  6
  7 //存储n边形的n个点坐标
  8 float px[1000] = {0};
  9 float py[1000] = {0};
 10 int n;  //n边形
 11
 12 void GetAllPoint(int n)   //得到n边形n个点的坐标
 13 {
 14     float x,y;
 15     float r = 0.8;      //半径
 16     float si = 2*PI/n;  //360°/n
 17     float angle = si/2; //开始度数
 18     int pnum = 0;
 19     while(angle<=2*PI){
 20         x = r*cos(angle);
 21         y = r*sin(angle);
 22         px[pnum] = x;
 23         py[pnum++] = y;
 24         angle = angle+si;
 25     }
 26 }
 27
 28 void ShowPic1(int n)    //画出n边形的外边框
 29 {
 30     int i;
 31     float x,y;
 32     for(i=0;i<n;i++){
 33         x = px[i];
 34         y = py[i];
 35         glVertex2f(x,y);
 36     }
 37 }
 38
 39 void ShowPic2(int n)    //画出n边形的中间连线
 40 {
 41     int i,j;
 42     float x0,y0,x,y;
 43     for(i=0;i<n;i++){
 44         x0 = px[i];
 45         y0 = py[i];
 46         for(j=0;j<n;j++){
 47             if(i==j)
 48                 continue;
 49             glVertex2f(x0,y0);
 50             x = px[j];
 51             y = py[j];
 52             glVertex2f(x,y);
 53         }
 54     }
 55 }
 56
 57 LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
 58 void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
 59 void DisableOpenGL(HWND, HDC, HGLRC);
 60
 61 int WINAPI WinMain(HINSTANCE hInstance,
 62                    HINSTANCE hPrevInstance,
 63                    LPSTR lpCmdLine,
 64                    int nCmdShow)
 65 {
 66     WNDCLASSEX wcex;
 67     HWND hwnd;
 68     HDC hDC;
 69     HGLRC hRC;
 70     MSG msg;
 71     BOOL bQuit = FALSE;
 72     float theta = 0.0f;
 73
 74     printf("请输入n (n边形):\n");
 75     scanf("%d",&n);
 76
 77     GetAllPoint(n); //获取多边形全部的点
 78
 79     /* register window class */
 80     wcex.cbSize = sizeof(WNDCLASSEX);
 81     wcex.style = CS_OWNDC;
 82     wcex.lpfnWndProc = WindowProc;
 83     wcex.cbClsExtra = 0;
 84     wcex.cbWndExtra = 0;
 85     wcex.hInstance = hInstance;
 86     wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 87     wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
 88     wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
 89     wcex.lpszMenuName = NULL;
 90     wcex.lpszClassName = "GLSample";
 91     wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;
 92
 93
 94     if (!RegisterClassEx(&wcex))
 95         return 0;
 96
 97     /* create main window */
 98     hwnd = CreateWindowEx(0,
 99                           "GLSample",
100                           "钻石图案",
101                           WS_OVERLAPPEDWINDOW,
102                           CW_USEDEFAULT,
103                           CW_USEDEFAULT,
104                           700,
105                           700,
106                           NULL,
107                           NULL,
108                           hInstance,
109                           NULL);
110
111     ShowWindow(hwnd, nCmdShow);
112
113     /* enable OpenGL for the window */
114     EnableOpenGL(hwnd, &hDC, &hRC);
115
116     /* program main loop */
117     while (!bQuit)
118     {
119         /* check for messages */
120         if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
121         {
122             /* handle or dispatch messages */
123             if (msg.message == WM_QUIT)
124             {
125                 bQuit = TRUE;
126             }
127             else
128             {
129                 TranslateMessage(&msg);
130                 DispatchMessage(&msg);
131             }
132         }
133         else
134         {
135             /* OpenGL animation code goes here */
136
137             glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
138             glClear(GL_COLOR_BUFFER_BIT);
139
140             //glPushMatrix();
141             //glRotatef(theta, 0.0f, 0.0f, 1.0f);
142
143             glBegin(GL_LINE_STRIP);
144                 glColor3f(1.0f, 0.0f, 0.0f);    //设置画笔颜色
145                 ShowPic1(n);    //输出n边形的外边框
146             glEnd();
147
148             //printf("%d\n",pnum);
149
150             glBegin(GL_LINES);
151                 ShowPic2(n);    //画出n边形的中间连线
152             glEnd();
153
154             glPopMatrix();
155
156             SwapBuffers(hDC);
157
158             theta += 1.0f;
159             Sleep (1);
160         }
161     }
162
163     /* shutdown OpenGL */
164     DisableOpenGL(hwnd, hDC, hRC);
165
166     /* destroy the window explicitly */
167     DestroyWindow(hwnd);
168
169     return msg.wParam;
170 }
171
172 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
173 {
174     switch (uMsg)
175     {
176         case WM_CLOSE:
177             PostQuitMessage(0);
178         break;
179
180         case WM_DESTROY:
181             return 0;
182
183         case WM_KEYDOWN:
184         {
185             switch (wParam)
186             {
187                 case VK_ESCAPE:
188                     PostQuitMessage(0);
189                 break;
190             }
191         }
192         break;
193
194         default:
195             return DefWindowProc(hwnd, uMsg, wParam, lParam);
196     }
197
198     return 0;
199 }
200
201 void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
202 {
203     PIXELFORMATDESCRIPTOR pfd;
204
205     int iFormat;
206
207     /* get the device context (DC) */
208     *hDC = GetDC(hwnd);
209
210     /* set the pixel format for the DC */
211     ZeroMemory(&pfd, sizeof(pfd));
212
213     pfd.nSize = sizeof(pfd);
214     pfd.nVersion = 1;
215     pfd.dwFlags = PFD_DRAW_TO_WINDOW |
216                   PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
217     pfd.iPixelType = PFD_TYPE_RGBA;
218     pfd.cColorBits = 24;
219     pfd.cDepthBits = 16;
220     pfd.iLayerType = PFD_MAIN_PLANE;
221
222     iFormat = ChoosePixelFormat(*hDC, &pfd);
223
224     SetPixelFormat(*hDC, iFormat, &pfd);
225
226     /* create and enable the render context (RC) */
227     *hRC = wglCreateContext(*hDC);
228
229     wglMakeCurrent(*hDC, *hRC);
230 }
231
232 void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
233 {
234     wglMakeCurrent(NULL, NULL);
235     wglDeleteContext(hRC);
236     ReleaseDC(hwnd, hDC);
237 }

Freecode : www.cnblogs.com/yym2013

转载于:https://www.cnblogs.com/yym2013/p/4619195.html

《图形学》实验一:钻石图案相关推荐

  1. 计算机图形学——绘制钻石图案

    要求:绘制钻石图案.将一圆周进行n等分,然后将所有的等分用直线连接,构成图案. n=8 q =2*p/n X=2*r*cos(q) Y=r*sin(q) #include <GL/glut.h& ...

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

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

  3. 计算机图形学课程设计html源码,孔令德的计算机图形学实验及课程设计(VC++版)...

    [实例简介] 计算机图形学实验及课程设计,是太原工业学院孔令德教授编写的关于计算机图形学这门课程相关的18个实验及5个课程设计.案例由浅入深,具有很强的操作性和实际意义. 本资源给出实验的ppt课件以 ...

  4. 计算机图形学实验报告孔令德,计算机图形学实验及课程设计.ppt

    文档介绍: 计算机图形学实验及课程设计 孔令德 2012年春于太原 计算机图形学安验环境 实验任务书 实验目的与要求 实验目的:巩固学生对计算机图形学的直线扫描转换原理. 有效边表填充原理.三维*** ...

  5. 华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...

    华北电力大学计算机图形学实验报告分析 科 技 学 院 课程设计(综合实验)报告 ( 2013 -- 2014 年度第 2 学期) 实验名称 OpenGL基本图元绘制实验 课程名称 计算机图形学 | | ...

  6. 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...

    PAGE 32 PAGE 7 计算机图形学 实验报告 班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换 实验目的 通过本次试验,学生可以掌握直线段的扫描转换算法及其 ...

  7. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc

    计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...

  8. 如何用计算机画立方体,画立方体-计算机图形学实验.doc

    画立方体-计算机图形学实验.doc (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机图形学实验--画立方体(通过视向变换等)具 ...

  9. 计算机图形学真实感显示代码,计算机图形学实验 - 真实感图形场景的生成

    <计算机图形学实验 - 真实感图形场景的生成>由会员分享,可在线阅读,更多相关<计算机图形学实验 - 真实感图形场景的生成(4页珍藏版)>请在人人文库网上搜索. 1.计算机图形 ...

最新文章

  1. MySQL中的RAND()函数使用详解
  2. JADAK收购RFID方案商SkyeTek,增强竞争力
  3. 什么?Spring Boot CommandLineRunner 有坑!?
  4. 软件工程python就业方向-月薪2万+的Python Web岗,学到什么程度能找到工作?
  5. SpringCloud Config Server搭建
  6. 一张图搞懂容器所有操作 - 每天5分钟玩转 Docker 容器技术(26)
  7. php send helo/ehlo first错误,phpmailer发送邮件提示SMTP server error怎么回事?
  8. C#LeetCode刷题之#40-组合总和 II(Combination Sum II)
  9. python 制作聊天程序-python实现点对点聊天程序
  10. Thinkphp精仿韩都衣舍商城网站源码
  11. 深入浅出GAMP算法(上): 因子图与消息传递算法
  12. wamp php 安装redis,wamp下redis安装及配置
  13. Java for循环的几种用法详解(转载)
  14. 设计模式(五):利用原型模式复制几个葫芦娃
  15. Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create
  16. clickhouse表引擎-合并树系列
  17. 十一届蓝桥杯省赛C语言B组——B: 既约分数
  18. Tensorflow 2.* 网络训练(二) fit(x, y, batch_size, epochs, verbose, validation_split, initial_epoch... )
  19. 精品收藏:GitHub人工智能AI开源项目
  20. Linux pstack命令

热门文章

  1. java异常看不懂_报错了 看不懂求解
  2. 出现身份验证错误 要求的函数不受支持_学习使用Kotlin创建Android应用程序第3部分:身份验证登录...
  3. pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
  4. 如何获取集合里面的下标_集合上下极限公式的理解
  5. ionic 页面传值问题
  6. qt5 linux apt get,Ubuntu 14.04下安装并配置Qt5.7.0
  7. python中dumps和dump区别_python json.dumps() json.dump()的区别
  8. php模板引擎smarty,[PHP]模板引擎Smarty介绍
  9. python查找客户总金额_该程序查找需要支付给所有表现良好的Python的最低金额
  10. dragon编译linux,在Linux系统中安装Alibaba Dragonwell8的方法