計算機圖形學實驗指導_第1頁
計算機圖形學實驗指導_第2頁
計算機圖形學實驗指導_第3頁
計算機圖形學實驗指導_第4頁
計算機圖形學實驗指導_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 計算機圖形學實驗指導書計算機科學與信息工程學院目錄實驗一OpenGL程序設計. 3實驗二二維基本圖元的生成 .7實驗三二維圖元的填充 13實驗四二維圖形的幾何變換 .18實驗五 裁剪. 23實驗六自由曲線. 26實驗七造型技術. 27實驗八交互式技術. 32實驗九真實感圖形的繪制. 37計算機圖形學實驗指導一、實驗目的1、培養(yǎng)學生動手編程解決實際問題的能力。2、訓練學生分析問題和調試程序的能力。3、鍛煉學生撰寫科技實驗論文的能力。二、實驗要求1、問題分析充分地分析和理解問題本身,弄清要求做什么,用什么算法。2、程序設計(1)根據所采用的算法,設計數據結構,畫出流程圖并編程。(2)最

2、后準備調試程序的數據及測試方案。 3、上機調試(1)對程序進行編譯,糾正程序中可能出現的語法錯誤。(2)調試前,先運行一遍程序看看究竟將會發(fā)生什么。(3)如果情況很糟,根據事先設計的測試方案并結合現場情況進行錯誤跟蹤,包括單步調試、設置觀察窗輸出中間變量值等手段。4、整理實習報告三、實驗報告1、實驗內容:采用的算法名稱2、問題描述:包括目標、任務、條件約束描述等。3、設計:數據結構設計和核心算法設計。主要功能模塊的輸入,處理(算法框架)和輸出。4、測試范例:測試結果的分析討論,測試過程中遇到的主要問題及所采用的解決措施。5、心得:包括程序的改進設想,經驗和體會。6、程序清單:源程序,其中包括變

3、量說明及詳細的注釋。實驗一OpenGL程序設計一、 實驗學時2學時二、 實驗類型學習型實驗三、 實驗目的和要求初步了解OpenGL程序設計結構;了解OpenGL的基本數據類型、核心函數及輔助函數的使用。四、 實驗內容1、綜述這次試驗的目的主要是使大家初步熟悉OpenGL這一圖形系統的用法,編程平臺是Visual C+,它對OpenGL提供了完備的支持。OpenGL提供了一系列的輔助函數,用于簡化Windows操作系統的窗口操作,使我們能把注意力集中到圖形編程上,這次試驗的程序就采用這些輔助函數。2、在VC中新建項目 · 新建一個項目。 選擇菜單File中的New選項,彈出一個分頁的對

4、話框,選中頁Projects中的Win32 Console Application項,然后填入你自己的Project name,如Test,回車即可。VC為你創(chuàng)建一個工作區(qū)(WorkSpace),你的項目Test就放在這個工作區(qū)里。· 為項目添加文件 為了使用OpenGL,我們需要在項目中加入三個相關的Lib文件:glu32.lib、glaux.lib、opengl32.lib,這三個文件位于c:program filesMicrosoft Visual Studiovc98lib目錄中。選中菜單Project->Add To Project->Files項(或用鼠標右鍵

5、),把這三個文件加入項目,在FileView中會有顯示。這三個文件請務必加入,否則編譯時會出錯?;蛘邔⑦@三個文件名添加到Project->Setting->Link->Object/library Modules 即可。點擊工具條中New Text File按鈕,新建一個文本文件,存盤為Test.c作為你的源程序文件,再把它加入到項目中,然后就可以開始編程了。#include <windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <GL/glaux.h>/初始化Open

6、GL場景void myinit (void) glClearColor (0.0, 0.0, 0.0, 0.0);/將背景置成黑色 glShadeModel (GL_FLAT);/設置明暗處理/用戶的繪圖過程void CALLBACK display(void) glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清除緩存 glBegin(GL_LINES);/開始畫一根白線 glColor3f (, , );/設置顏色為白色 /設置第一根線的兩個端點,請注意:OpenGL坐標系的原點是在屏幕左下角 glVertex2f(, ); glVe

7、rtex2f(, ); glColor3f (, , );/設置顏色為紅色 /設置第二根線的兩個端點 glVertex2f(, ); glVertex2f(, ); glEnd();/畫線結束 glFlush ();/繪圖結束/主過程:/初始化Windows的窗口界面/并初始化OpenGL場景,繪圖int main(int argc, char* argv) auxInitDisplayMode (AUX_RGB);/初始化顯示模式,采用RGB彩色系統。 auxInitPosition (0, 0, 400, 150);/初始化窗口位置、大小 auxInitWindow ("Disp

8、lay Lists");/初始化窗口,設置標題 myinit (); auxMainLoop(display);/循環(huán)運行display過程,display由用戶編寫 return(0);3、程序說明 每個函數的具體含義在程序注釋中已作了敘述,不再多說。OpenGL的函數在格式上很有特點,它以gl為前綴,并且函數名的最后一個字母指出所用的數據類型,如:glColor3f(),字母f指明要使用浮點數。字母前的數字指明參數個數或指明二維還是三維,如:glVertex2f()是要設置二維的點。OpenGL采用的是狀態(tài)機的方式,用戶設定一種狀態(tài),程序照此運行。如:glBegin(GL_LIN

9、ES)設定畫線狀態(tài)(GL_LINES是OpenGL已定義好的常量),glColor3f()設定繪圖所用顏色。main()函數中的幾個aux前綴函數是OpenGL提供的輔助庫,用以初始化窗口,大家不必深究,我們關注的是display()函數,它是我們真正繪圖的地方。函數glColor3f()以RGB方式設置顏色,格式為:glColor3f(red, green, blue),每種顏色值在(0.0, 1.0)之間。為了能顯示更多的顏色,最好把系統設置成16位真彩色模式。函數glVertex2f(x, y)設置二維頂點。函數glBegin(UINT State)、glEnd()是最基本的作圖函數,下

10、面對它作一介紹。如上所述,OpenGL是一個狀態(tài)機,glBegin(UINT State)可以設定如下狀態(tài):GL_POINTS畫點GL_LINES畫線,每兩個頂點(Vertex)為一組GL_LINE_STRIP畫線,把若干個頂點順次連成折線GL_LINE_LOOP畫線,把若干個頂點順次連成封閉折線GL_TRIANGLES畫三角形,每三個頂點為一組GL_QUADS畫四邊形,每四個頂點為一組GL_POLYGON畫多邊形還有GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS_STRIP 等等。大家可以把每一種狀態(tài)都試一試。程序可以有多組glBegin()、glE

11、nd()并列的形式,如:. .glBeing(GL_LINES);.glEnd();glBeing(GL_QUADS);. .glEnd();. .除了上述的基本圖元外,函數glRectf(x1, y1, x2, y2)可以畫一個矩形,但這個函數不能放在glBegin()和glEnd()之間,下面的兩句程序是畫一個藍色的矩形。glColor3f (, , );glRectf(, , ,);實驗二二維基本圖元的生成一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求1、掌握二維基本圖元直線段生成的DDA算法,中點算法;2、掌握二維基本圖元圓弧生成的中點算法;3、掌握對線型線寬的屬性的控制。

12、四、實驗內容1、編程實現DDA、中點算法生成直線2、中點掃描轉換生成圓、橢圓五、建立工程步驟1.在visual c+.net中使用opnengl,建立項目的步驟:2、在visual c+中的建立控制臺項目的步驟:實驗三二維圖元的填充一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求1、掌握二維圖元填充的遞歸算法;2、掌握二維圖元填充的種子填充算法四、實驗內容構造任意一個邊界表示的多邊形,假定該多邊形內部是四連通的。要求:1、用遞歸算法實現對多邊形內部的填充,要求內部顏色和邊界不一致。(參照教案進行)2、用種子填充掃描線算法實現多邊形內部的填充。五、建立win32應用程序工程。接下來,請

13、按實驗二中的方法給上面建立的空項目添加文件“”,由于同學們初次接觸WIN32編程,所以對于下文中很多代碼可暫時不要求理解,重點了解紅色代碼。遞歸算法源碼如下:/ INCLUDES /#define WIN32_LEAN_AND_MEAN / just say no to MFC#include <windows.h> / include all the windows headers#include <windowsx.h> / include useful macros/ DEFINES / defines for windows #define WINDOW_CLA

14、SS_NAME "WINCLASS1"#define WINDOW_WIDTH 400#define WINDOW_HEIGHT 300/ GLOBALS /HWND main_window_handle = NULL; / globally track main windowHINSTANCE hinstance_app = NULL; / globally track hinstancevoid BoundaryFill4(HDC,int,int,COLORREF,COLORREF);/ FUNCTIONS /LRESULT CALLBACK WindowProc(HW

15、ND hwnd, UINT message, WPARAM wParam, LPARAM lParam)/ this is the main message handler of the systemHDChdc;/ handle to a device contextHPEN hnewpen;HPEN holdpen;/ what is the message switch(message)case WM_RBUTTONDOWN:hdc=GetDC(hwnd);hnewpen=CreatePen(PS_SOLID,1,RGB(0,255,0);holdpen=(HPEN)SelectObje

16、ct(hdc,hnewpen);/ 構造多邊形MoveToEx(hdc,30,40,NULL);LineTo(hdc,60,40);LineTo(hdc,90,100);LineTo(hdc,60,150);LineTo(hdc,30,150);LineTo(hdc,30,40);SelectObject(hdc,holdpen);DeleteObject(hnewpen);ReleaseDC(hwnd,hdc);return(0);break;case WM_LBUTTONDOWN:hdc = GetDC(hwnd);BoundaryFill4(hdc,LOWORD(lParam),HIWO

17、RD(lParam),RGB(0,255,0),RGB(255,0,0); / release the dcReleaseDC(hwnd,hdc);return(0);break;case WM_DESTROY: / kill the application, this sends a WM_QUIT message PostQuitMessage(0); / return successreturn(0); break;default:break; / end switch/ process any messages that we didn't take care of retur

18、n (DefWindowProc(hwnd, message, wParam, lParam); / end WinProc/ WINMAIN /int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)WNDCLASSEX winclass; / this will hold the class we createHWND hwnd; / generic window handleMSG message; / generic message/ first fill i

19、n the window class stucturewinclass.cbSize = sizeof(WNDCLASSEX);winclass.style= CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;winclass.lpfnWndProc= WindowProc;winclass.cbClsExtra= 0;winclass.cbWndExtra= 0;winclass.hInstance= hinstance;winclass.hIcon= LoadIcon(NULL, IDI_APPLICATION);winclass.hCurso

20、r= LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);winclass.lpszMenuName= NULL;winclass.lpszClassName= WINDOW_CLASS_NAME;winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);/ save hinstance in globalhinstance_app = hinstance;/ register the window classif (!Reg

21、isterClassEx(&winclass)return(0);/ create the windowif (!(hwnd = CreateWindowEx(NULL, / extended style WINDOW_CLASS_NAME, / class "Scanline Fill Demo", / title WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, / initial x,y WINDOW_WIDTH, / initial width WINDOW_HEIGHT,/ initial height NULL, / hand

22、le to parent NULL, / handle to menu hinstance,/ instance of this application NULL)/ extra creation parmsreturn(0);/ save main window handlemain_window_handle = hwnd;while(GetMessage(&message,NULL,0,0)/ translate any accelerator keysTranslateMessage(&message);/ send the message to the window

23、procDispatchMessage(&message); / end while/ return to Windows like thisreturn(message.wParam); / end WinMain/void BoundaryFill4(HDC hdc,int x,int y,COLORREF boundarycolor,COLORREF newcolor)COLORREF color;color=GetPixel(hdc,x,y);if(color != boundarycolor) && (color !=newcolor)SetPixel(hdc

24、,x,y,newcolor);BoundaryFill4(hdc,x,y+1,boundarycolor,newcolor);BoundaryFill4(hdc,x,y-1,boundarycolor,newcolor);BoundaryFill4(hdc,x-1,y,boundarycolor,newcolor);BoundaryFill4(hdc,x+1,y,boundarycolor,newcolor);2、更改項目中recursion.cpp文件代碼:1)聲明函數void BoundaryFill4(HDC,int,int,COLORREF,COLORREF);2)修改LRESULT

25、CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)WndProc函數體復制即可。BoundaryFill4函數。實驗四二維圖形的幾何變換一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求1、掌握二維圖形的基本幾何變換,如平移、旋轉、縮放、對稱、錯切變換;2、掌握OpenGL中模型變換函數,實現簡單的動畫技術。四、實驗內容1、下面的代碼采用GLUT庫,實現了一個矩形在窗口中勻速轉動(單擊鼠標右鍵停止轉動),請修改代碼,實現矩形在窗口內沿著水平線勻速移動。/* * This is a simple

26、double buffered program. * Pressing the left mouse button rotates the rectangle. * Pressing the right mouse button stops the rotation. */#include <GL/glut.h>#include <stdlib.h>static GLfloat spin = 0.0;void display(void) glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef(spin, 0.0,

27、0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glRectf(-10.0, -10.0, 10.0, 10.0); glPopMatrix(); glutSwapBuffers();void spinDisplay(void) spin = spin + 2.0; if (spin > 360.0) spin = spin - 360.0; glutPostRedisplay();void init(void) glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT);void reshape(int

28、w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();void mouse(int button, int state, int x, int y) switch (button) case GLUT_LEFT_BUTTON: if (state = GLUT_DOW

29、N) glutIdleFunc(spinDisplay); break; case GLUT_MIDDLE_BUTTON: case GLUT_RIGHT_BUTTON: if (state = GLUT_DOWN) glutIdleFunc(NULL); break; default: break; /* * Request double buffer display mode. * Register mouse input callback functions */int main(int argc, char* argv) glutInit(&argc, argv); glutI

30、nitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv0); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMainLoop(); return 0; /* ANSI C requires main to return int. */2、課堂教學中關于模型變化講解時,

31、對一個三角形分別實現平移、縮放、旋轉等變化的源碼及效果圖。請以該例為藍本,實現3題的代碼編寫。源碼:#include <GL/glut.h>#include <stdlib.h>void init(void) glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT);void draw_triangle(void) glBegin (GL_LINE_LOOP); glVertex2f(0.0, 25.0); glVertex2f(25.0, -25.0); glVertex2f(-25.0, -25.0); gl

32、End();void display(void) glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glLoadIdentity (); glColor3f (1.0, 1.0, 1.0); draw_triangle (); glEnable (GL_LINE_STIPPLE); glLineStipple (1, 0xF0F0); glLoadIdentity (); glTranslatef (-20.0, 0.0, 0.0); draw_triangle (); glLineStipple (1, 0xF00F); gl

33、LoadIdentity (); glScalef (1.5, 0.5, 1.0); draw_triangle (); glLineStipple (1, 0x8888); glLoadIdentity (); glRotatef (90.0, 0.0, 0.0, 1.0); draw_triangle (); glDisable (GL_LINE_STIPPLE); glFlush ();void reshape (int w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION);

34、 glLoadIdentity (); if (w <= h) gluOrtho2D (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, 50.0*(GLfloat)h/(GLfloat)w); else gluOrtho2D (-50.0*(GLfloat)w/(GLfloat)h, 50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0); glMatrixMode(GL_MODELVIEW);int main(int argc, char* argv) glutInit(&argc, argv); glutInitD

35、isplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv0); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0;實驗結果圖:3、已知某三角形的三頂點坐標為50.0,25.0,150.0,25.0,100.0,100.0。要求:(1)創(chuàng)建一個長寬分別為600、600的窗口,窗口的左上

36、角位于屏幕坐標(100,100)處。(提示:請試著修改gluOrtho2D函數參數,使得繪制的三角形盡可能居中顯示)(2)繪制一個由上述頂點所描繪的三角形,實現該三角形進行下列的幾何變化:首先使三角形沿著其中心的x軸,y軸方向縮小50%;然后沿著初始中心旋轉90度;最后沿著y軸平移100個單位。實驗結果如下圖所示:實驗五裁剪一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求1、掌握二維圖形的基本裁剪算法,如編碼算法、中點分割算法、Liang-Barsky算法;2、掌握OpenGL中矩陣堆棧函數的使用,實現簡單的組合變換。四、實驗內容1、采用Liang-Barsky算法,編程實現教材17

37、7頁6.15題。(其他裁剪算法同學們可作為課后練習)要求:1)單擊鼠標左鍵,運行窗口出現裁剪窗口及待裁剪線段,效果圖如左下圖;2)單擊鼠標右鍵,窗口呈現出裁剪后的裁剪窗口及裁剪線段,效果圖如右下圖。提示:1)關于鼠標的交互操作,請同學們參考實驗四中的第1題;2)繪制圖形的函數,建議放在回調函數mouse(int button,int state,int x,int y)中,而display()函數中可只保留glClear (GL_COLOR_BUFFER_BIT)清除顏色緩存這個函數。3)考慮到該裁剪窗口和裁剪線段的大小,建議將reshape()函數中的正交投影函數參數變?yōu)間lOrtho(-5

38、.0, 5.0, -5.0, 5.0, -1.0, 1.0);2、下面的程序繪制的是一個簡單的太陽系,其中包括一個太陽和一顆行星,它們使用線框球體繪制函數實現。當按下鍵盤“D”或“d”時,行星將實現自轉;按下鍵盤“Y”或“y”時,行星將繞太陽公轉。請同學們認真讀懂每一段代碼,然后試著修改這段程序,實現1)將行星的中心傾斜;2)給行星加上衛(wèi)星。#include <GL/glut.h>#include <stdlib.h>static int year = 0, day = 0;void init(void) glClearColor (0.0, 0.0, 0.0, 0.0

39、); glShadeModel (GL_FLAT);void display(void) glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glPushMatrix();/ glutWireSphere中第一、二、三個參數分別表示半徑,經度線數、緯度線數 glutWireSphere(1.0, 20, 16); /* draw sun */ glRotatef (GLfloat) year, 0.0, 1.0, 0.0); glTranslatef (2.0, 0.0, 0.0); glRotatef (GLfloat) day

40、, 0.0, 1.0, 0.0); glutWireSphere(0.2, 10, 8); /* draw smaller planet */ glPopMatrix(); glutSwapBuffers();void reshape (int w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode(GL

41、_MODELVIEW); glLoadIdentity(); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);void keyboard (unsigned char key, int x, int y) switch (key) case 'd': day = (day + 10) % 360; glutPostRedisplay(); break; case 'D': day = (day - 10) % 360; glutPostRedisplay(); break; case 'y&

42、#39;: year = (year + 5) % 360; glutPostRedisplay(); break; case 'Y': year = (year - 5) % 360; glutPostRedisplay(); break; case 27: exit(0); break; default: break; int main(int argc, char* argv) glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (500,

43、500); glutInitWindowPosition (100, 100); glutCreateWindow (argv0); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0;實驗六自由曲線一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求1、掌握Hermite曲線生成算法;2、掌握Bezier曲線的定義生成算法、離散生成算法;3、掌握B樣條曲線的定義生成算法。四、實驗內容假設窗口的寬高分別是600,6

44、00個像素單位,定義的裁剪窗口由函數gluOrtho2D(-50.0,50.0,-50.0,50.0)決定。1、已知空間點兩點P0(-40.0,-40.0,0.0)、P1(10.0,-200.0,0.0)及該點上的切向量分別為R0(30.0,240.0,0.0),R1(30.0,-240.0,0.0)。試編程實現Hermite曲線的繪制。2、已知空間四點P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根據Bezier曲線的定義編程繪制曲線。3、已知空間四點P0(-40.0,-40.0,0

45、.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根據Bezier曲線的離散生成算法繪制曲線。4、已知空間四點P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根據B樣條曲線的定義繪制曲線。實驗七造型技術一、實驗學時2學時二、實驗類型設計型實驗三、實驗目的和要求了解分形幾何的基本概念,實現分形(Cayley)樹、koch曲線、Sierpinski三角形、Mandelbrot集的繪制。四、實驗內容下面給出了幾種分形圖案

46、實現的原理或C語言代碼,同學們選做其中兩題,實現在VC編譯器下分形圖的繪制。1、Cayley樹的初始生成元是一個“丫”字形的幾何形狀,經過有限次自相似的迭代過程完成。下面的代碼是在TC下實現.。#include "graphics.h"#include "math.h"void cayley(int n,float x0,float y0,float len,int th) float x1,y1,x2,y2,x3,y3; int th1=20,th2=20; float scale=0.7,dtor=PI/180,sl=scale*len; if(n=

47、1)return; x1=x0+len*cos(th*dtor); y1=y0-len*sin(th*dtor); x2=x1+sl*cos(th+th1)*dtor); y2=y1-sl*sin(th+th1)*dtor); x3=x1+sl*cos(th-th2)*dtor); y3=y1-sl*sin(th-th2)*dtor); line(x0,y0,x1,y1); line(x1,y1,x2,y2); line(x1,y1,x3,y3); cayley(n-1,x1,y1,sl,th+th1); cayley(n-1,x1,y1,sl,th-th2); main() float x=

48、320.0,y=470.0; int th=90,len=120; int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,""); setcolor(GREEN); cayley(2,x,y,len,th); getch(); cayley(3,x,y,len,th); getch(); cayley(5,x,y,len,th); getch(); cayley(10,x,y,len,th); getch(); cayley(15,x,y,len,th); getch(); closegraph();2、KO

49、CH曲線的生成過程是先作一條直線,然后在直線的中央作一個等邊三角形;再在每一條線段的中央分別作一個等邊三角形; 依照此法,無限制地進行下去,就形成了Koch曲線。下面是KOCH曲線的C語言代碼。#include "graphics.h"#include "math.h"float x=80,y=420;int th=0,L=6;float dtor=3.1415926/180;void koch(int n)float d;d=L/3n;if(n=0) moveto(x,y); x+=d*cos(th*d

50、tor); y-=d*sin(th*dtor); lineto(x,y); return; koch(n-1); th+=60; koch(n-1); th-=120; koch(n-1); th+=60; koch(n-1);main() int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,""); cleardevice(); setbkcolor(0); setcolor(9); line(80,60,560,60); getch(); moveto(80,240); lineto(240,240); lineto(320,100); lineto(400,240); lineto(560,240); getch(); settextstyle(2,0,5); outtextxy(40,50,"(a)"); outtextxy(40,230,"(b)"); o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論