计算机图形学复习参考题_第1页
计算机图形学复习参考题_第2页
计算机图形学复习参考题_第3页
计算机图形学复习参考题_第4页
计算机图形学复习参考题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上复习参考题3、请使用 OpenGL 和 GLUT 编写一个简单的图形程序,用于显示一个填充的白色矩形。其 中矩形规定为(-0.8, -0.8)(0.8, 0.8),程序窗口的大小为(200, 200),标题为“白色矩形”。#include <GL/glut.h>void Paint()glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.8, -0.8, 0.8, 0.8);glFlush();int main()glutInitWindowSize(200, 200);glutCreateWindow("白色矩形&q

2、uot;);glutDisplayFunc(Paint);glutMainLoop();4、 请使用 OpenGL 和 GLUT 编写一个简单的图形程序,用于显示一个填充的红色三角形。 其中三角形的顶点分别是(-0.8, -0.8)、(0.8, -0.8)和(0, 0.8),程序窗口大小为(200, 200),标题 为“红色三角形”。 #include <GL/glut.h>void Paint()glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 0, 0); glBegin(GL_TRIANGLES);glVertex2d(-0.8, -0.8

3、), glVertex2d(0.8, -0.8), glVertex2d(0, 0.8); glEnd();glFlush();int main() glutInitWindowSize(200, 200); glutCreateWindow("红色三角形!"); glutDisplayFunc(Paint);glutMainLoop();5、 请使用 OpenGL 和 GLUT 编写一个简单的图形程序,用于演示点的反走样效果。要求使 用线段(-0.6, -0.6)(0.6, 0.6)上均匀分布的 5 个点(含端点),点的大小为 10.5 像素,程序 窗口的大小为(200,

4、 200),标题为“点的反走样”。#include <GL/glut.h> void Paint() double x; glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);for(x = - 0.6; x <= 0.6; x += 0.3) glVertex2f(x, x);glEnd();glFlush();int main() glutInitWindowSize(200, 200);glutCreateWindow("点的反走样"); glutDisplayFunc(Paint); glPointSize

5、(10.5); glEnable(GL_POINT_SMOOTH);glutMainLoop();6、 请使用 OpenGL 和 GLUT 编写一个简单的图形程序,用于演示线段的反走样效果。其中 线段的端点为(-0.6, -0.3)和(0.6, 0.3),线宽为 4.5 像素,程序窗口的大小为(200, 200),标题为“线段的反走样”。#include <GL/glut.h> void Paint() glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES);glVertex2f(-0.6, -0.3), glVertex2f(0.6, 0.

6、3);glEnd();glFlush();int main() glutInitWindowSize(200, 200);glutCreateWindow("线段的反走样");glutDisplayFunc(Paint); glLineWidth(4.5);glEnable(GL_LINE_SMOOTH); glutMainLoop(); 25、请使用 OpenGL、GLU 和 GLUT 编写一个三维犹他茶壶程序。其中茶壶的半径为 1 单 位,并远移 6.5 单位;观察体规定为:视场角=30 度,宽高比=1,近=1,远=100;程序窗口的大小为(200, 200),标题为“

7、尤他茶壶”。#include <GL/glut.h>void Paint() glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();gluPerspective(30, 1, 1, 100);glTranslatef(0, 0, - 6.5); glutSolidTeapot(1);glFlush();int main()glutInitWindowSize(200, 200);glutCreateWindow("尤他茶壶");glutDisplayFunc(Paint);glutMainLoop();26、 请使用 Ope

8、nGL 和 GLUT 编写一个显示线框球体的简单图形程序。其中球体的半径为 0.8,经线数为 24,纬线数为 12,并绕x 轴旋转 30 度,程序窗口的大小为(200, 200),标题 为“线框球”。#include <GL/glut.h>void Paint() glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glRotated(30, 1, 0, 0); glutWireSphere(0.8, 24, 12);glFlush();int main() glutInitWindowSize(200, 200); glutCreateWi

9、ndow("线框球");glutDisplayFunc(Paint);glutMainLoop();27、 请使用 OpenGL 和 GLUT 编写一个显示线框椭球体的简单图形程序。其中椭球体的两 极方向为上下方向,左右方向的半径为 0.98,上下方向的半径为 0.49,前后方向的半径为0.6,经线数为 48,纬线数为 24,使用正投影,裁剪窗口为(-1, -0.5)(1, 0.5),程序窗口的大 小为(400, 200),标题为“线框椭球”。#include <GL/glut.h>void Paint() glClear(GL_COLOR_BUFFER_BIT

10、);glLoadIdentity();gluOrtho2D(-1, 1, -0.5, 0.5);glScaled(0.98, 0.49, 0.6);glRotated(-90, 1, 0, 0); / 调整两极方向glutWireSphere(1, 48, 24);glFlush();int main() glutInitWindowSize(400, 200);glutCreateWindow("线框椭球");glutDisplayFunc(Paint);glutMainLoop();28、 请使用 OpenGL、GLU 和 GLUT 编写一个三维犹他茶壶程序。其中茶壶的

11、半径为 1 单 位,并远移 6.5 单位;观察体规定为:视场角=30 度,宽高比=1,近=1,远=100;程序窗口 的大小为(200, 200),标题为“旋转的尤他茶壶”。茶壶绕 z 轴不断旋转,旋转的时间间隔为 25 毫秒,角度间隔为 2 度。注意旋转角度必须限定在 0360 度以内。#include <gl/glut.h>int angle = 0;void Paint()glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity();gluPerspective(30, 1, 1, 100);glTranslatef(0, 0, -6.5); g

12、lRotated(angle, 0, 0, 1);glutSolidTeapot(1);glFlush();void timer(int millis) angle = (angle + 2) % 360; glutPostRedisplay();glutTimerFunc(millis, timer, millis);int main() glutInitWindowSize(200, 200);glutCreateWindow("旋转的尤他茶壶");glutTimerFunc(25, timer, 25);glutDisplayFunc(Paint);glutMainL

13、oop();29、 请使用 OpenGL、GLU 和 GLUT 编写一个简单的多视口演示程序。要求:在屏幕窗口 左下角的 1/4 部分显示一个红色的填充正三角形;在屏幕窗口右上角的 1/4 部分显示一个绿 色的填充正方形;三角形和正方形的左下角顶点坐标值均为(0, 0),右下角顶点坐标值均为(1, 0);裁剪窗口均为(-0.1, -0.1)(1.1, 1.1);程序窗口的大小为(200, 200),标题为“多视口演示”。#include <gl/glut.h>void Viewport(int x, int y, int w, int h)glViewport(x, y, w, h

14、);glLoadIdentity();gluOrtho2D(-0.1, 1.1, -0.1, 1.1);void Triangle()glBegin(GL_TRIANGLES);glVertex2d(0, 0);glVertex2d(1, 0);glVertex2d(0.5, 0.8660);glEnd();void Paint() int w = glutGet(GLUT_WINDOW_WIDTH) / 2;int h = glutGet(GLUT_WINDOW_HEIGHT) / 2;glClear(GL_COLOR_BUFFER_BIT);Viewport(0, 0, w, h);glC

15、olor3f(1, 0, 0);Triangle();Viewport(w, h, w, h);glColor3f(0, 1, 0);glRectd(0, 0, 1, 1);glFlush();int main()glutInitWindowSize(200, 200); glutCreateWindow("多视口演示");glutDisplayFunc(Paint);glutMainLoop(); 30、请使用 OpenCV 编写一个简单的程序,用于从当前目录读入并显示一幅图像(例如当 前目录中的 lena.jpg)。#include<opencv/cv.h>

16、 / CV#include<opencv/highgui.h> / GUIint main()IplImage *im = cvLoadImage("lena.jpg", CV_LOAD_IMAGE_COLOR); / 声明IplImage指针,载入彩色图像if(im = 0) return -1; / 载入失败cvNamedWindow("First OpenCV", CV_WINDOW_AUTOSIZE); /创建窗口cvShowImage("First OpenCV", im); / 显示图像 while(cvWai

17、tKey(0) != 27) / 等待按Esc键cvDestroyWindow("First OpenCV"); / 销毁窗口 cvReleaseImage(&im); / 释放图像31、 请使用 OpenCV 编写一个简单的程序,该程序首先读入一幅彩色图像(例如当前目录 中的 lena.jpg),然后将这幅彩色图像的 3 个通道分离出来,得到 3 幅灰度图像,最后显示 这 3 幅灰度图像并释放相关资源。#include <opencvcv.h>#include <opencvhighgui.h>#include <opencvcxco

18、re.h>#include <stdlib.h>#include <stdio.h>int main()  IplImage* img;int y,x;img = cvLoadImage("lena.jpg ");/加载图像lena.jpg /*   将3通道图像 分解成 3幅单通道的图像 */IplImage* b_img ,*g_img,*r_img; /声明三个图像变量/* 给三个单通图像 分配内存空间 */b_img = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U , 1 );

19、g_img = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U , 1 );r_img = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U , 1 );for(y=0;y<img->height;y+)/将图像指针偏移到第y行unsigned char* prow = (unsigned char*)(  img->imageData + y*  img->widthStep);unsigned char* brow = (unsigned char*)(b_img->im

20、ageData + y*b_img->widthStep);unsigned char* grow = (unsigned char*)(g_img->imageData + y*g_img->widthStep);unsigned char* rrow = (unsigned char*)(r_img->imageData + y*r_img->widthStep);            for(x=0;x<img->width;x+)/将B通道  G通道  R通道的值

21、 分别拷贝到3个单通道的图像中去browx = prow3*x + 0 ; /拷贝B通道的值prow3*x + 0 到 单通道图像b_imggrowx = prow3*x + 1 ; /拷贝G通道的值prow3*x + 0 到 单通道图像g_imgrrowx = prow3*x + 2 ; /拷贝R通道的值prow3*x + 0 到 单通道图像r_img/* 创建3个窗口 */cvNamedWindow("b");cvNamedWindow("g");cvNamedWindow("r");/* 显示b  g r三个通道的图像

22、 */cvShowImage("b" , b_img);cvShowImage("g" , g_img);cvShowImage("r" , r_img); /* 显示大图像 */cvNamedWindow("1");cvShowImage("1",img);cvWaitKey(0); /等待按键cvReleaseImage(&img);     /释放内存空间32、 使用 OpenCV 编写一个演示傅立叶变换和逆变换的程序。该程序首先装入一幅灰度图 像并显示该图像(

23、例如当前目录中的 lena.jpg),然后对该图像进行傅立叶正变换,对得到 的结果进行傅立叶逆变换,显示得到的结果以便与原图像进行比对。#include<opencv/cv.h>#include<opencv/highgui.h>int main()CvMat *X = cvLoadImageM("lena.jpg", 0);CvMat *Y = cvCreateMat(X->rows, X->cols, CV_64F);cvScale(X, Y, (double)1 / 255, 0);cvDFT(Y, Y, CV_DXT_FORWAR

24、D, 0); cvDFT(Y, Y, CV_DXT_INVERSE_SCALE, 0);cvShowImage("src", X), cvShowImage("dst", Y); cvWaitKey(0);cvReleaseMat(&X), cvReleaseMat(&Y); cvDestroyAllWindows();33、 使用 OpenCV 编写一个程序,该程序对一幅彩色图像(例如当前目录中的 lena.jpg)进 行一次中值模糊,要求分别显示源图像和模糊化以后的图像。其中内核大小为 5×5。#include<ope

25、ncv/cv.h>#include<opencv/highgui.h>int main() CvMat *X = cvLoadImageM("lena.jpg", 1); cvShowImage("src", X);cvSmooth(X, X, CV_MEDIAN, 5, 5, 0, 0); cvShowImage("dst", X);cvWaitKey(0);cvReleaseMat(&X);cvDestroyAllWindows();34、 使用 OpenCV 编写一个程序,该程序对一幅灰度图像(例如当前

26、目录中的 lena.jpg)进行Sobel 锐化,要求显示锐化以后的图像。其中内核大小为 3×3,x 和 y 方向均使用 1 阶差 分。#include<opencv/cv.h>#include<opencv/highgui.h>int main() CvMat *X = cvLoadImageM("lena.jpg", 1); cvShowImage("src", X);CvMat *tmp = cvCreateMat(X->rows, X->cols, CV_16SC3);cvSobel(X, tmp,

27、1, 1, 3);cvConvert(tmp, X);cvShowImage("dst", X); cvWaitKey(0);cvReleaseMat(&X), cvReleaseMat(&tmp);cvDestroyAllWindows();35、 使用 OpenCV 编写一个程序,该程序使用大小为 3 的正方形模板(锚点位于模板中心) 对源图像(例如当前目录中的二值图像 image-j.bmp)进行 2 次腐蚀操作,要求显示源图像 和腐蚀以后的图像。#include<opencv/cv.h>#include<opencv/highgui

28、.h> int main() CvMat *X = cvLoadImageM("lena.jpg", 1); cvShowImage("src", X);CvMat *tmp = cvCreateMat(X->rows, X->cols, CV_16SC3); cvSobel(X, tmp, 1, 1, 3);cvConvert(tmp, X);cvShowImage("dst", X); cvWaitKey(0);cvReleaseMat(&X), cvReleaseMat(&tmp);cvDestroyAllWindows();36、 使用 OpenCV 编写一个程序,该程序对一幅灰度图像(例如当前目录中的 lena.jpg)进 行直方图均衡化,要求分别显示源图像和均衡化以后的图像。#include <opencv/cv.h>#include <opencv/highgui.h> int main()CvMat *X = cvLoadImageM("lena.jpg", 0);cvShowImage(&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论