當前位置首頁 > 高等教育 > 實驗設(shè)計
搜柄,搜必應(yīng)! 快速導(dǎo)航 | 使用教程

計算機圖形學(xué)綜合實驗設(shè)計——用C語言實現(xiàn)畫圖板的功能

文檔格式:DOC| 35 頁|大小 231KB|積分 15|2025-03-16 發(fā)布|文檔ID:253592386
第1頁
第2頁
第3頁
下載文檔到電腦,查找使用更方便 還剩頁未讀,繼續(xù)閱讀>>
1 / 35
此文檔下載收益歸作者所有 下載文檔
  • 版權(quán)提示
  • 文本預(yù)覽
  • 常見問題
  • 計算機圖形學(xué)綜合實驗設(shè)計 ——用C語言實現(xiàn)畫圖板的功能學(xué) 院:信息管理學(xué)院 專 業(yè):計算機科學(xué)與技術(shù)姓 名:趙 某某 學(xué)號:****08030132計算機圖形學(xué)綜合實驗設(shè)計 ————畫圖板Windows系統(tǒng)自帶的畫圖板簡單靈巧,為用戶的小型圖形開發(fā)工作帶來了很多便利本實驗完全利用C語言開發(fā)了一個畫圖板,該畫圖板具有畫圖、調(diào)整圖形大小與方位、保存與打開文件等基本圖能一.設(shè)計目的利用C語言完成了一個Windows應(yīng)用程序的開發(fā)——畫圖板,該畫圖板能實現(xiàn)基本的圖形操作功能通過本次實驗,應(yīng)該了解怎么將像素寫入文件、怎么從文件中讀取像素;了解直線、矩形、圓和Bezier曲線等圖形的繪制原理、旋轉(zhuǎn)原理、移動院里和縮放原理等二.功能描述本實驗利用C語言編程實現(xiàn)的畫圖板,具有基本的畫圖功能、圖形操作功能和文件保存打開功能等1)圖形繪制功能(1)繪制直線:能繪制任意角度的直線,能實現(xiàn)直線的旋轉(zhuǎn)、伸長、縮短和上下左右移動。

    2)繪制矩形:能繪制任意大?。ó嫴挤秶鷥?nèi))的矩形,能實現(xiàn)矩形的放大、縮小和上下左右移動3)繪制圓形:能繪制任意半徑大小(畫布范圍內(nèi))的圓形,能實現(xiàn)圓形的放大和縮小4)繪制Bezier曲線:能根據(jù)屏幕上的點(單擊鼠標后產(chǎn)生的點)繪制出Bezier曲線2)文件處理功能(1)保存:能保存畫布中的所有圖形到指定的文件2)加載:能打開指定的文件,將其內(nèi)容加載到畫布中3)用戶幫助功能顯示用戶使用指南,包括各種圖形的繪制方法和操作方法等三. 總體設(shè)計1. 系統(tǒng)模塊圖本系統(tǒng)包括4個模塊,分別是圖形繪制模塊、鼠標控制模塊、功能控制模塊和保存加載模塊.(1)圖形繪制模塊該模塊包括圖形的繪制和操作功能,主要有繪制直線、移動直線、縮放和旋轉(zhuǎn)直線;繪制矩形、移動和縮放矩形;繪制和縮放圓形;繪制Bezier曲線2)鼠標控制模塊該模塊主要實現(xiàn)鼠標狀態(tài)的獲取、鼠標位置的設(shè)置,以及鼠標的繪制等3)功能控制模塊該模塊實現(xiàn)的功能包括輸出中文、填充像素和顯示用戶幫助4)保存加載模塊該模塊將像素保存到指定文件和從指定文件中讀取像素到畫布2.數(shù)據(jù)結(jié)構(gòu)設(shè)計● int Rx,Ry,R:分別表示所畫圓形的圓心的橫坐標、縱坐標,以及圓的半徑。

    ● int TOPx,TOPy,BOTTOMx,BOTTOMy:分別表示所畫矩形的左上角的橫坐標、縱坐標,以及右下角的橫坐標、縱坐標● int Centx,Centy:表示直線或者矩形旋轉(zhuǎn)中心點的橫坐標和縱坐標● int lineStartx,lineStarty,lineEndx,lineEndy:分別表示直線的起點橫坐標、縱坐標,以及終點的橫坐標、縱坐標● int linePoint_x[20],linePoint_y[20]:這兩個數(shù)組用于在畫Bezier曲線時存儲所選點的橫坐標和縱坐標3.函數(shù)功能描述 1) outChinese()函數(shù)原型: void outChinese(char*mat,int x,int y,int color)本程序中雖然有中文顯示,但是顯示的中文不多,所以就沒有加載中文字庫,而是生成字模信息來建立一個小型字庫,以此來減輕程序“負擔” outChinese()函數(shù)根據(jù)點陣信息顯示中文,其中mat 為字模指針,matisize 為點陣大小,x和y表示起始坐標,color表示顯示的顏色2) fill()函數(shù)原型: void fill(int startx,int starty,int endy, int color)Fill()函數(shù)用于以指定的顏色填充指定的區(qū)域。

    其中 startx、starty 表示填充區(qū)域的左上角橫、縱坐標,endx、endy表示填充區(qū)域的右下角的橫、縱坐標,color 表示填充的顏色該函數(shù)調(diào)用系統(tǒng)畫圖函數(shù)putpixel()來實現(xiàn)3) showHelp()函數(shù)原型:void showHelp()showHelp()函數(shù)用于顯示用戶使用指南用戶使用指南包括各種圖行的繪制方法和調(diào)整方法等4) save()函數(shù)原型:void save()Save()函數(shù)用于保存畫布中的圖形用戶首先輸入保存文件的文件名,然后將畫布中的像素寫入文件,保存文件是以“.dat”結(jié)尾的保存完畢將提示用戶5)函數(shù)原型: void load()load()函數(shù)用于打開已有的圖形用戶首先輸入打開文件的文件名,然后將文件中的像素輸入到畫布中打開完畢將提示用戶如果打開過程中出現(xiàn)錯誤,如沒有找到指定的文件等,也將顯示錯誤信息6) mouseStatus()函數(shù)原型: int mouseStatus(int*x,int*y)mouseStatus()函數(shù)用于獲取鼠標的狀態(tài),包括鼠標指針所處的橫坐標、縱坐標,以及鼠標的按鍵情況中斷的入口參數(shù)AH為03H,出口參數(shù)BH表示鼠標按鍵狀態(tài),位0為1表示按下左鍵,位1為1表示按下右鍵,位2為1表示按下中鍵;CX表示水平位置,DX表示垂直位置。

    函數(shù)中傳遞的指針參數(shù)x、y 分別用來接收鼠標指針的水平位置和垂直位置 7)setMousePos()函數(shù)原型:int setMosePos(int x,int y)setMousePos()函數(shù)用來設(shè)置鼠標的位置X、y分別表示預(yù)設(shè)置的橫坐標和縱坐標這里中斷的入口參數(shù)AH為1,分別把x和y賦給寄存器CX和DX8)DrawMouse()函數(shù)原型:voidDrawMouse(float x,float y)DrawMouse()函數(shù)用于繪制鼠標X、y分別表示鼠標指針所處的位置9)DrawLine()函數(shù)原型:void DrawLine()DrawLine()函數(shù)用于繪制直線單擊鼠標左鍵,捕獲鼠標指針位置,并以此為起點開始畫直線,拖動鼠標,松開鼠標結(jié)束繪制然后可以通過鍵盤來調(diào)整直線的位置、大小等10) DrawRectangle()函數(shù)原型:void DrawRectangle()DrawRectangle()函數(shù)用于繪制矩形其繪制方法與直線的繪制方法一致11)LineToCircle()函數(shù)原型:void LineToCircle(int x0,int y0,int r)LineToCircle()函數(shù)實現(xiàn)的是直線法生成圓。

    x0、y0表示圓心,r表示半徑直線法生成圓的相關(guān)知識讀者可查閱圖形學(xué)資料12)DrawCircle()函數(shù)原型:void DrawCircle()DrawCircle()函數(shù)實現(xiàn)的是畫圓功能,該函數(shù)是調(diào)用LineToCircle()函數(shù)來實現(xiàn)的13)factorial()函數(shù)原型:void factorial(int n)factorial()函數(shù)用于求階乘,n表示需要求階乘的函數(shù)求階乘的方法很多,本程序中使用的是比較原始的方法,即從n依次乘到1,也可以用遞歸來實現(xiàn),讀者可以自行設(shè)計14)berFunction()函數(shù)原型:float berFunction(int I,int n,double t)berFunction()函數(shù)是伯恩斯坦基函數(shù)的計算,該函數(shù)調(diào)用了前面的階乘函數(shù)factorial().15)DrawBezier()函數(shù)原型:void DrawBezier()DrawBezier()?函數(shù)實現(xiàn)畫Bezier曲線,該函數(shù)調(diào)用了berFunction()函數(shù)Bezier曲線的繪制涉及到數(shù)學(xué)知識,讀者可查閱相關(guān)資料4.程序?qū)崿F(xiàn)4.1預(yù)處理程序預(yù)處理包括頭文件的加載、常量的定義和全局變量的定義,以及點陣字模的定義。

    include #include #include #include #include #include #include #include /*定義常量*//*向上翻頁移鍵*/#define PAGEUP 0x4900/*向下翻頁移鍵*/#define PAGEDOWN 0x5100/*Escape鍵*/#define ESC 0x011b /*左移鍵*/#define LEFT 0x4b00/*右移鍵*/#define RIGHT 0x4d00 /*下移鍵*/#define DOWN 0x5000 /*上移鍵*/#define UP 0x4800/*空格鍵*/#define SPACE 0x3920#define NO_PRESSED 0#define LEFT_PRESSED 1#define RIGHT_PRESSED 2#define pi 3.1415926/*定義全局變量*/int Rx,Ry,R;int TOPx,TOPy,BOTTOMx,BOTTOMy;int Centx,Centy;int lineStartx,lineStarty,lineEndx,lineEndy;int linePoint_x[20],linePoint_y[20];/*這里的字模數(shù)組均由“點陣字模工具”生成,你可以用你自己需要的點陣信息來替換示例中的字模信息,注意字模大小要一致,否則顯示會出問題。

    /char zhi16K[]={/* 以下是 '直' 的 16點陣楷體_GB2312 字模,32 byte */ 0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00, 0x02,0x00,0x07,0xC0,0x08,0x40,0x0F,0x40, 0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0x40, 0x08,0x40,0x0F,0xFC,0x70,0x00,0x00,0x00,};char xian16K[]={/* 以下是 '線' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x80,0x00,0x90,0x08,0x88,0x10,0x80, 0x24,0xF0,0x45,0x80,0x78,0xB0,0x11,0xC0, 0x2C,0x88,0x70,0x50,0x04,0x60,0x18,0xA4, 0x63,0x14,0x00,0x0C,0x00,0x04,0x00,0x00,};char ju16K[]={/* 以下是 '矩' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x00,0x08,0x00,0x08,0x78,0x10,0x80, 0x1E,0x80,0x28,0xF8,0x48,0x88,0x0E,0x88, 0xF8,0xF0,0x08,0x80,0x14,0x80,0x12,0x9E, 0x20,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,};char xing16K[]={/* 以下是 '形' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x00,0x07,0x88,0x3A,0x08,0x12,0x10, 0x12,0x20,0x17,0x48,0xFA,0x10,0x12,0x20, 0x12,0xC8,0x12,0x08,0x22,0x10,0x42,0x20, 0x00,0x40,0x00,0x80,0x03,0x00,0x00,0x00,};char yuan16K[]={/* 以下是 '圓' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0xF8,0x3F,0x08,0x23,0x88,0x24,0x88, 0x27,0x08,0x21,0xC8,0x2E,0x48,0x29,0x48, 0x29,0x48,0x22,0x88,0x24,0x48,0x28,0x08, 0x3F,0xE8,0x00,0x10,0x00,0x00,0x00,0x00,};char qing16K[]={/* 以下是 '清' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x80,0x00,0xE0,0x33,0x80,0x10,0xE0, 0x03,0x80,0x40,0xFC,0x2F,0x00,0x01,0xE0, 0x12,0x20,0x13,0xA0,0x22,0x20,0x63,0xA0, 0x42,0x20,0x02,0x60,0x00,0x20,0x00,0x00,};char ping16K[]={/* 以下是 '屏' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0xF0,0x0F,0x30,0x08,0x60,0x0F,0x80, 0x0A,0x20,0x09,0x40,0x08,0xF8,0x17,0x20, 0x11,0x3E,0x2F,0xE0,0x21,0x20,0x42,0x20, 0x82,0x20,0x04,0x20,0x08,0x20,0x00,0x00,};char bao16K[]={/* 以下是 '保' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x00,0x09,0xF0,0x0A,0x10,0x12,0x10, 0x13,0xE0,0x30,0x80,0x50,0xFC,0x9F,0x80, 0x11,0xC0,0x12,0xA0,0x14,0x98,0x18,0x8E, 0x10,0x80,0x10,0x80,0x00,0x00,0x00,0x00,};char cun16K[]={/* 以下是 '存' 的 16點陣楷體_GB2312 字模,32 byte */ 0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00, 0x02,0x70,0x05,0x90,0x08,0x20,0x08,0x40, 0x18,0x7E,0x2B,0xA0,0xC8,0x20,0x08,0x20, 0x08,0x20,0x08,0xA0,0x00,0x40,0x00,0x00,};char jia16K[]={/* 以下是 '加' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00, 0x0F,0x00,0x79,0x3C,0x09,0x44,0x11,0x44, 0x11,0x44,0x22,0x44,0x22,0x78,0x4A,0x00, 0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};char zai16K[]={/* 以下是 '載' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x80,0x08,0xA0,0x08,0x90,0x0E,0x80, 0x38,0xF0,0x0F,0x80,0x78,0x50,0x0E,0x50, 0x34,0x20,0x1E,0x20,0x34,0x50,0x0E,0x92, 0x75,0x0A,0x04,0x06,0x04,0x02,0x00,0x00,};char bang16K[]={/* 以下是 '幫' 的 16點陣楷體_GB2312 字模,32 byte */ 0x04,0x00,0x07,0x38,0x1C,0x48,0x06,0x50, 0x1C,0x50,0x07,0x48,0x78,0x58,0x11,0x40, 0x21,0xF0,0x4F,0x10,0x09,0x10,0x09,0x50, 0x09,0x20,0x01,0x00,0x01,0x00,0x00,0x00,};char zhu16K[]={/* 以下是 '助' 的 16點陣楷體_GB2312 字模,32 byte */ 0x00,0x00,0x00,0x20,0x0C,0x20,0x34,0x20, 0x24,0x20,0x34,0x38,0x25,0xC8,0x34,0x48, 0x24,0x48,0x26,0x88,0x38,0x88,0xE1,0x28, 0x02,0x10,0x04,0x00,0x00,0x00,0x00,0x00,};4.2控制模塊 功能控制模塊主要實現(xiàn)根據(jù)點陣信息顯示中文功能、填充屏幕功能和顯示用戶指南功能,分別由函數(shù)outChinese()、fill()和showHelp()來實現(xiàn)。

    1) void outChinese(char*mat,int matsize,int x,int y,int color),根據(jù)定義的點陣字模數(shù)組顯示中文2) void fill(int startx,int starty,int endx,int endy,int color),在指定的區(qū)域用指定的顏色來填充3) void showHelp(),顯示用戶使用指南,包括直線、矩形、圓形和Bezier曲線的繪制方法 /*根據(jù)點陣信息顯示中文函數(shù)* /void outChinese(char *mat,int matsize,int x,int y,int color) { int i,j,k,n; n=(matsize -1)/8+1 for(j=0;j>k)) /*測試為1的位則顯示*/ putpixel(x + i * 8 + k, y + j, color);}/*填充函數(shù)*/void fill(int startx,int starty,int endx,int endy,int color){ int i,j; for(i=startx;i<=endx;i++) for(j=starty;j<=endy;j++) /*在指定位置以指定顏色畫一像素*/ putpixel(i,j,color);} /*顯示用戶幫助函數(shù)*/void showHelp(){ setcolor(14); outtextxy(45,50,"Line:"); setcolor(WHITE); outtextxy(45,50," 1 Press left button to start until to line end."); outtextxy(45,65," 2 Use UP,DOWN,LEFT,RIGHT keys to move it."); outtextxy(45,80," 3 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it."); outtextxy(45,95," 4 Use SPACE key to rotate it."); setcolor(14); outtextxy(45,120,"Rectangle:"); setcolor(WHITE); outtextxy(45,120," 1 Press left button to start until to right corner."); outtextxy(45,135," 2 Use UP,DOWN,LEFT,RIGHT keys to move it."); outtextxy(45,150," 3 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it."); setcolor(14); outtextxy(45,170,"Circle:"); setcolor(WHITE); outtextxy(45,170," 1 Press left button to start until to end."); outtextxy(45,185," 2 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it."); setcolor(14); outtextxy(45,205,"Bezier:"); setcolor(WHITE); outtextxy(45,205," Press left button to start, and right button to end."); outtextxy(45,230,"Press ESC key to stop the operation function."); outtextxy(45,245,"Press right button to end the drawing works."); outtextxy(45,260,"Press any key to continue......"); getch(); fill(40,40,625,270,0);} 4.3保存加載模塊 顧名思義保存加載模塊實現(xiàn)的是保存功能和加載功能。

    分別由函數(shù) save() 和 load()來實現(xiàn)1) void save(), 保存畫布中的像素到指定文件2) void load(), 將指定文件中的像素加載到畫布中 /*保存參數(shù)*/void save(){ int i,j; FILE *fp; char fileName[20]; fill(0,447,630,477,2); gotoxy(1,25); printf("\n\n\n\n Input the file name[.dat]:"); scanf("%s",fileName); fill(0,447,630,477,2); /*以讀寫的方式打開文件*/ if((fp=fopen(fileName,"w+"))==NULL) { outtextxy(260,455,"Failed to open file!"); exit(0); } outtextxy(280,455,"saving..."); /*保存像素到文件*/ for(i=5;i<630;i++) for(j=30;j<=445;j++) fputc(getpixel(i,j),fp); fclose(fp); fill(0,447,630,477,2); outtextxy(260,455,"save over!");} /*打開函數(shù)*/void load(){ int i,j; char fileName[20]; FILE *fp; fill(0,447,630,477,2); gotoxy(1,25); printf("\n\n\n\n Input the file name[.dat]:"); scanf("%s",fileName); /*打開指定的文件*/ if((fp=fopen(fileName,"r+"))!=NULL) { fill(0,447,630,477,2); outtextxy(280,455,"loading..."); /*從文件中讀出像素*/ for(i=5;i<630;i++) for(j=30;j<=445;j++) putpixel(i,j,fgetc(fp)); fill(0,447,630,477,2); outtextxy(280,455,"loading over !"); } /*打開失敗*/ else { fill(0,447,630,477,2); outtextxy(260,455,"Failed to open file!"); } fclose(fp);}4.4鼠標控制模塊鼠標控制模塊實現(xiàn)的是對鼠標的操作,包括鼠標狀態(tài)的獲取、鼠標位置的設(shè)置和繪制鼠標,著幾個功能分別由函數(shù) mouseStatus()、setMousePos()和 drawMouse()來實現(xiàn)。

    1) int mouseStatus(int* x, int* y), 獲取鼠標的位置,包括水平位置和垂直位置,以及鼠標的按鍵情況(左鍵、右鍵和沒有按鍵)2) int setMousePos(int x , int y), 設(shè)置鼠標的位置,將鼠標指針設(shè)置在(x,y)表示的坐標位置;(3) void DrawMouse(float x,float y), 繪制鼠標 /*獲取鼠標狀態(tài)函數(shù)*/int mouseStatus(int* x,int* y){ /*定義兩個寄存器變量,分別存儲入口參數(shù)和出口參數(shù)*/ union REGS inregs,outregs; int status; status=NO_PRESSED; /*入口參數(shù)AH=3,讀取鼠標位置及其按鈕狀態(tài)*/ inregs.x.ax=3; int86(0x33,&inregs,&outregs); /*CX表示水平位置,DX表示垂直位置*/ *x=outregs.x.cx; *y=outregs.x.dx; /*BX表示按鍵狀態(tài)*/ if(outregs.x.bx&1) status=LEFT_PRESSED; else if(outregs.x.bx&2) status=RIGHT_PRESSED; return (status);}/*設(shè)置鼠標指針位置函數(shù)*/int setMousePos(int x,int y){ union REGS inregs,outregs; /*入口參數(shù)AH=4,設(shè)置鼠標指針位置*/ inregs.x.ax=4; inregs.x.cx=x; inregs.x.dx=y; int86(0x33,&inregs,&outregs);}/*繪制鼠標函數(shù)*/void DrawMouse(float x,float y){ line(x,y,x+5,y+15); line(x,y,x+15,y+5); line(x+5,y+15,x+15,y+5); line(x+11,y+9,x+21,y+19); line(x+9,y+11,x+19,y+21); line(x+22,y+19,x+20,y+21);}4.5圖形繪制模塊圖形繪制模塊是本程序的核心部分,主要包括繪制直線、繪制矩形、繪制圓行和繪制Bezier曲線。

    1) 繪制直線繪制直線由函數(shù)DrawLine()實現(xiàn),該函數(shù)實現(xiàn)了直線的繪制、調(diào)整(包括移動、旋轉(zhuǎn)和縮放)功能其實現(xiàn)流程可參見圖13.2 /*繪制直線函數(shù)*/void DrawLine(){ int x0,y0,x1,y1; int last_x=0,last_y=0; int endFlag=0; int key; int temStartx,temStarty,temEndx,temEndy; int increment_x,increment_y,angle; DrawMouse(last_x,last_y); while(1) { /*右鍵結(jié)束畫直線*/ while((mouseStatus(&x1,&y1)==RIGHT_PRESSED)) endFlag=1; if(endFlag==1) break; /*鼠標移動,沒有單擊,僅僅畫移動的鼠標*/ while(mouseStatus(&x1,&y1) == NO_PRESSED) { if(last_x!=x1||last_y!=y1) { DrawMouse(last_x,last_y); DrawMouse(x1,y1); last_x=x1; last_y=y1; } } /*單擊左鍵后,開始畫直線*/ if(mouseStatus(&x0,&y0)==LEFT_PRESSED) { DrawMouse(last_x,last_y); line(x0,y0,x1,y1); last_x=x1; last_y=y1; /*拉動過程中,畫直線和鼠標*/ while(mouseStatus(&x1, &y1)==LEFT_PRESSED) { if(last_x!=x1||last_y!=y1) { line(x0,y0,last_x,last_y); line(x0,y0,x1,y1); last_x=x1; last_y=y1; } } /*松開左鍵后,畫直線完成,記錄直線的起始位置*/ lineStartx=x0; lineStarty=y0; lineEndx=x1; lineEndy=y1; while(1) { /*從鍵盤獲取鍵值,開始操作(移動、放大、縮小、旋轉(zhuǎn))直線*/ key=bioskey(0); /*ESC鍵,退出操作*/ if(key==ESC) break; /*旋轉(zhuǎn)*/ if(key==SPACE) { /*計算旋轉(zhuǎn)中心*/ /*如果直線示傾斜的*/ if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx)) { Centx=(lineEndx-lineStartx)/2+lineStartx; Centy=(lineEndy-lineStarty)/2+lineStarty; } /*如果直線是豎直的*/ if(lineStarty==lineEndy) { Centx=(lineEndx-lineStartx)/2+lineStartx; Centy=lineStarty; } /*如果直線是水平的*/ if(lineStartx==lineEndx) { Centx=lineStartx; Centy=(lineEndy-lineStarty)/2+lineStarty; } temStartx=lineStartx; temStarty=lineStarty; temEndx=lineEndx; temEndy=lineEndy; /*旋轉(zhuǎn)不能超過邊界*/ if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { /*清除原有的直線*/ setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*計算旋轉(zhuǎn)30度后的起點坐標*/ lineStartx=(temStartx-Centx)*cos(pi/6)-(temStarty-Centy)*sin(pi/6)+Centx; lineEndx=(temEndx-Centx)*cos(pi/6)-(temEndy-Centy)*sin(pi/6)+Centx; /*計算旋轉(zhuǎn)30度后的終點坐標*/ lineStarty=(temStartx-Centx)*sin(pi/6)+(temStarty-Centy)*cos(pi/6)+Centy; lineEndy=(temEndx-Centx)*sin(pi/6)+(temEndy-Centy)*cos(pi/6)+Centy; temStartx=lineStartx; temStarty=lineStarty; temEndx=lineEndx; temEndy=lineEndy; /*繪制旋轉(zhuǎn)后的直線*/ line(lineStartx,lineStarty,lineEndx,lineEndy); } } /*左移直線*/ if(key==LEFT) { if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*起始的橫坐標減小*/ lineStartx-=5; lineEndx-=5; line(lineStartx,lineStarty,lineEndx,lineEndy); } } /*右移直線*/ if(key==RIGHT) { if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*起始的橫坐標增加*/ lineStartx+=5; lineEndx+=5; line(lineStartx,lineStarty,lineEndx,lineEndy); } } /*下移直線*/ if(key==DOWN) { if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*起始的縱坐標增加*/ lineStarty+=5; lineEndy+=5; line(lineStartx,lineStarty,lineEndx,lineEndy); } } /*上移直線*/ if(key==UP) { if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*起始的縱坐標減小*/ lineStarty-=5; lineEndy-=5; line(lineStartx,lineStarty,lineEndx,lineEndy); } } /*放大直線*/ if(key==PAGEUP) { if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445) { setwritemode(XOR_PUT); line(lineStartx,lineStarty,lineEndx,lineEndy); /*如果直線是傾斜的*/ if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx)) { /*計算直線的傾角*/ angle=atan((fabs(lineEndy-lineStarty))/(fabs(lineEndx-lineStartx))); /*計算水平增量*/ increment_x=cos(angle)*2; /*計算垂直增量*/ increment_y=sin(angle)*2; /*計算放大后的起始坐標*/ if(lineStartxlineEndx) { lineEndx-=increment_x; lineEndy-=increment_y; lineStartx+=increment_x; lineStarty+=increment_y; } 。

    點擊閱讀更多內(nèi)容
    最新文檔
    傳統(tǒng)文化道德不是高懸的明月而是腳下的星光.pptx
    世界無煙日關(guān)注青少年成長健康無煙為成長護航.pptx
    五四青年節(jié)詩詞贊歌五四青年自強不息.pptx
    XX學(xué)校班主任培訓(xùn)用心管理慧做班主任.pptx
    拒絕熬夜健康養(yǎng)生規(guī)律作息遠離亞健康.pptx
    兒童成長手冊時光里的童真印記.pptx
    幼兒園夏季傳染病預(yù)防指南預(yù)見夏天健康童行夏季傳染病預(yù)防科普.pptx
    高中生心理健康教育主題班會快樂學(xué)習(xí)高效學(xué)習(xí)正視壓力學(xué)會減壓.pptx
    員工職業(yè)道德與職業(yè)素養(yǎng)培訓(xùn)遵守職業(yè)道德提高職業(yè)修養(yǎng).pptx
    2025職業(yè)病防治法宣傳周健康守護職防同行.pptx
    XX幼兒園防災(zāi)減災(zāi)安全教育臨災(zāi)不亂安全童行學(xué)會保護自己.pptx
    在2025年縣教育工作大會暨高考備考工作推進會上的講話發(fā)言材料.docx
    在2025年縣全面從嚴治黨和黨風廉政會議上的講話發(fā)言材料.docx
    在2025年全市慶祝“五一”暨勞動模范表彰大會上的講話發(fā)言材料多篇.docx
    2025年稅務(wù)局青年代表在五四青年座談會上的發(fā)言材料3篇.docx
    在2025年市委全體會議上的主持講話發(fā)言材料.docx
    2025年黨風廉政建設(shè)工作要點材料.docx
    在2025年全市青年干部慶祝五四青年節(jié)大會上的講話發(fā)言材料多篇.docx
    在入黨積極分子培訓(xùn)班上的講話發(fā)言材料.docx
    縣文旅局黨組書記在五一假期及夏季旅游安全生產(chǎn)工作部署會議上的講話發(fā)言材料.docx
    賣家[上傳人]:仙人指路
    資質(zhì):實名認證