




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include<graphics.h>#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<dos.h>#include<bios.h>#include<math.h>#include<alloc.h>/*定義常量*/*向上翻頁移鍵*/#definePAGEUP0x4900/*向下翻頁移鍵*/#definePAGEDOWN0x5100/*Escape鍵*/#defineESC0x011b/*左移鍵*/#defineLEFT0x4b
2、00/*右移鍵*/#defineRIGHT0x4d00/*下移鍵*/#defineDOWN0x5000/*上移鍵*/#defineUP0x4800/*空格鍵*/#defineSPACE0x3920#defineNO_PRESSED0#defineLEFT_PRESSED1#defineRIGHT_PRESSED2#definepi3.1415926/*定義全局變量*/intRx,Ry,R;intTOPx,TOPy,BOTTOMx,BOTTOMy;intCentx,Centy;intlineStartx,lineStarty,lineEndx,lineEndy;intlinePoint_x20,
3、linePoint_y20;/*這里的字模數(shù)組均由“點陣字模工具”生成,你可以用你自己需要的點陣信息來替換示例中的字模信息,注意字模大小要一致,否則顯示會出問題。*/charzhi16K=/*以下是'直'的16點陣楷體_GB2312字模,32byte*/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
4、xian16K=/*以下是'線'的16點陣楷體_GB2312字模,32byte*/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,;charju16K=/*以下是'矩'的16點陣楷體_GB2312字模,32byte*/0x00,0x00,0x08,0x00,0x08,0x78,0x10,0x80
5、,0x1E,0x80,0x28,0xF8,0x48,0x88,0x0E,0x88,0xF8,0xF0,0x08,0x80,0x14,0x80,0x12,0x9E,0x20,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,;charxing16K=/*以下是形的16點陣楷體_GB2312字模,32byte*/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,
6、0x80,0x03,0x00,0x00,0x00,;charyuan16K=/*以下是圓的16點陣楷體_GB2312字模,32byte*/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,;charqing16K=/*以下是清的16點陣楷體_GB2312字模,32byte*/0x00,0x80,0x00,0xE0,0x33,0x
7、80,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,;charping16K=/*以下是屏的16點陣楷體_GB2312字模,32byte*/0x00,0xF0,0x0F,0x30,0x08,0x60,0x0F,0x80,0x0A,0x20,0x09,0x40,0x08,0xF8,0x17,0x20,0x11,0x3E,0x2F,0xE0,0x21,0x20,0x42,0x20,0x8
8、2,0x20,0x04,0x20,0x08,0x20,0x00,0x00,;charbao16K=/*以下是保'的16點陣楷體_GB2312字模,32byte*/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,;charcun16K=/*以下是'存'的16點陣楷體_GB2312字模,32byte*/0x
9、01,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,;charjia16K=/*以下是力口的16點陣楷體_GB2312字模,32byte*/0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x0F,0x00,0x79,0x3C,0x09,0x44,0x11,0x44,0x11,0x44,0x22,0x4
10、4,0x22,0x78,0x4A,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;charzai16K=/*以下是'載'的16點陣楷體_GB2312字模,32byte*/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,;charbang16K=/*以下是幫的16點陣楷
11、體_GB2312字模,32byte*/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,;charzhu16K=/*以下是助的16點陣楷體_GB2312字模,32byte*/0x00,0x00,0x00,0x20,0x0C,0x20,0x34,0x20,0x24,0x20,0x34,0x38,0x25,0xC8,0x34,0x4
12、8,0x24,0x48,0x26,0x88,0x38,0x88,0xE1,0x28,0x02,0x10,0x04,0x00,0x00,0x00,0x00,0x00,;/*自定義函數(shù)*/voidoutChinese(char*mat,intmatsize,intx,inty,intcolor);voidfill(intstartx,intstarty,intendx,intendy,intcolor);voidshowHelp();voidsave();voidload();intmouseStatus(int*x,int*y);intsetMousePos(intx,inty);voidDra
13、wMouse(floatx,floaty);voidDrawLine();voidDrawRectangle();voidLineToCircle(intx0,inty0,intr);voidDrawCircle();longfactorial(intn);floatberFunction(inti,intn,doublet);voidDrawBezier();/*根據(jù)點陣信息顯示中文函數(shù)*/voidoutChinese(char*mat,intmatsize,intx,inty,intcolor)/*依次:字模指針、點陣大小、起始坐標(x,y)、顏色*/inti,j,k,n;n=(matsi
14、ze-1)/8+1;for(j=0;j<matsize;j+)for(i=0;i<n;i+)for(k=0;k<8;k+)if(matj*n+i&(0x80>>k)/*測試為1的位則顯示*/putpixel(x+i*8+k,y+j,color);/*填充函數(shù)*/voidfill(intstartx,intstarty,intendx,intendy,intcolor)inti,j;for(i=startx;i<=endx;i+)for(j=starty;j<=endy;j+)/*在指定位置以指定顏色畫一像素*/putpixel(i,j,colo
15、r);/*顯示用戶幫助函數(shù)*/voidshowHelp()setcolor(14);setcolor(WHITE); outtextxy(45,50," outtextxy(45,65," outtextxy(45,80,"shrink it.");outtextxy(45,95,"outtextxy(45,50,"Line:");1 Pressleftbuttontostartuntiltolineend.");2 UseUP,DOWN,LEFT,RIGHTkeystomoveit.");3 UsePA
16、GEUPkeytoenlargeit,andPAGEDOWNkeyto4 UseSPACEkeytorotateit.");setcolor(14);setcolor(WHITE);outtextxy(45,120, corner.");outtextxy(45,135,outtextxy(45,150, to shrink it.");outtextxy(45,120,"Rectangle:");1 Pressleftbuttontostartuntiltoright2 UseUP,DOWN,LEFT,RIGHTkeystomoveit.&q
17、uot;);3 UsePAGEUPkeytoenlargeit,andPAGEDOWNkeysetcolor(14);outtextxy(45,170,"Circle:");setcolor(WHITE);outtextxy(45,170,"1Pressleftbuttontostartuntiltoend.");outtextxy(45,185,"2UsePAGEUPkeytoenlargeit,andPAGEDOWNkeytoshrinkit.");setcolor(14);outtextxy(45,205,"Bezie
18、r:");setcolor(WHITE);outtextxy(45,205,"Pressleftbuttontostart,andrightbuttontoend.");outtextxy(45,230,"PressESCkeytostoptheoperationfunction.");outtextxy(45,245,"Pressrightbuttontoendthedrawingworks.");outtextxy(45,260,"Pressanykeytocontinue");getch();fil
19、l(40,40,625,270,0);/*保存函數(shù)*/voidsave()inti,j;FILE*fp;charfileName20;fill(0,447,630,477,2);gotoxy(1,25);printf("nnnnInputthefilename.dat:");scanf("%s",fileName);fill(0,447,630,477,2);/*以讀寫的方式打開文件*/if(fp=fopen(fileName,"w+")=NULL)outtextxy(260,455,"Failedtoopenfile!&q
20、uot;);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,"saveover!");/*打開函數(shù)*/voidload()inti,j;charfileName20;FILE*fp;fill(0,447,630,477,2);gotoxy(1,25);printf("
21、nnnnInputthefilename.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,&qu
22、ot;loadingover!");/*打開失敗*/elsefill(0,447,630,477,2);outtextxy(260,455,"Failedtoopenfile!");fclose(fp);/*獲取鼠標狀態(tài)函數(shù)*/intmouseStatus(int*x,int*y)*/*定義兩個寄存器變量,分別存儲入口參數(shù)和出口參數(shù)unionREGSinregs,outregs;intstatus;status=NO_PRESSED;/*入口參數(shù)AH3,讀取鼠標位置及其按鈕狀態(tài)*/inregs.x.ax=3;int86(0x33,&inregs,&
23、outregs);/*CX表示水平位置,DX表示垂直位置*/*x=outregs.x.cx;*y=outregs.x.dx;/*BX表示按鍵狀態(tài)*/if(outregs.x.bx&1)status=LEFT_PRESSED;elseif(outregs.x.bx&2)status=RIGHT_PRESSED;return(status);/*設(shè)置鼠標指針位置函數(shù)*/intsetMousePos(intx,inty)unionREGSinregs,outregs;/*入口參數(shù)AH4,設(shè)置鼠標指針位置*/inregs.x.ax=4;inregs.x.cx=x;inregs.x.dx
24、=y;int86(0x33,&inregs,&outregs);/*繪制鼠標函數(shù)*/voidDrawMouse(floatx,floaty)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);/*繪制直線函數(shù)*/voidDrawLine()intx0,y0,x1,y1;intlast_x=0,last_y=0;intendFlag=0;intkey;intt
25、emStartx,temStarty,temEndx,temEndy;intincrement_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,
26、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)
27、;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-lineSt
28、artx)/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=line
29、Endx;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)+Cen
30、tx;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=lineEn
31、dy;/*繪制旋轉(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(lineStar
32、tx,lineStarty,lineEndx,lineEndy);/*右移直線 */if(key=RIGHT)if(lineStartx>=10lineEndy <=445)&& lineStarty>=40&&lineEndx<=620&&/*setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的橫坐標增加*/lineStartx+=5;lineEndx+=5;line(lineStartx,lineStarty,lineEndx
33、,lineEndy);下移直線 */if(key=DOWN)if(lineStartx>=10lineEndy <=445)&& lineStarty>=40&&lineEndx<=620&&/*setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的縱坐標增加 */lineStarty+=5;lineEndy+=5;line(lineStartx,lineStarty,lineEndx,lineEndy);上移直線 */if(key
34、=UP)if(lineStartx>=10lineEndy <=445)&& lineStarty>=40&&lineEndx<=620&&setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的縱坐標減小 */lineStarty-=5;lineEndy-=5;line(lineStartx,lineStarty,lineEndx,lineEndy);/*放大直線*/if(key=PAGEUP)if(lineStartx>=1
35、0&&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);/*計算水平增量
36、*/increment_x=cos(angle)*2;/*計算垂直增量*/increment_y=sin(angle)*2;/*計算放大后的起始坐標*/if(lineStartx<lineEndx)lineStartx-=increment_x;lineStarty-=increment_y;lineEndx+=increment_x;lineEndy+=increment_y;if(lineStartx>lineEndx)lineEndx-=increment_x;lineEndy-=increment_y;lineStartx+=increment_x;lineStarty+=
37、increment_y;/*如果直線豎直的*/if(lineStarty=lineEndy)lineStartx-=5;lineEndx+=5;/*如果直線是水平的*/if(lineStartx=lineEndx)lineStarty-=5;lineEndy+=5;line(lineStartx,lineStarty,lineEndx,lineEndy);/*縮小直線*/if(key=PAGEDOWN)if(lineStartx>=10&&lineStarty>=40&&lineEndx<=620&&lineEndy<=4
38、45)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;/*計算縮小后的起始坐標*/
39、if(lineStartx<lineEndx)lineStartx+=increment_x;lineStarty+=increment_y;lineEndx-=increment_x;lineEndy-=increment_y;if(lineStartx>lineEndx)lineEndx+=increment_x;lineEndy+=increment_y;lineStartx-=increment_x;lineStarty-=increment_y;/*如果直線豎直的*/if(lineStarty=lineEndy)lineStartx+=5;lineEndx-=5;/*如果
40、直線是水平的*/if(lineStartx=lineEndx)lineStarty+=5;lineEndy-=5;line(lineStartx,lineStarty,lineEndx,lineEndy);DrawMouse(x1,y1);DrawMouse(last_x,last_y);/*繪制矩形函數(shù)*/voidDrawRectangle()intx0,y0,x1,y1;intlast_x=0,last_y=0;intendFlag=0;intkey;DrawMouse(last_x,last_y);while(1)/*單擊右鍵,結(jié)束繪制矩形*/while(mouseStatus(&
41、;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);rectangle(
42、x0,y0,x1,y1);last_x=x1;last_y=y1;/*按著鼠標左鍵不動,繪制矩形*/while(mouseStatus(&x1,&y1)=LEFT_PRESSED)if(last_x!=x1|last_y!=y1)rectangle(x0,y0,last_x,last_y);rectangle(x0,y0,x1,y1);last_x=x1;last_y=y1;/*繪制結(jié)束后,記錄左上角和右下角的坐標*/TOPx=x0;TOPy=y0;BOTTOMx=x1;BOTTOMy=y1;while(1)key=bioskey(0);if(key=ESC)break;/*放
43、大矩形*/if(key=PAGEUP)if(TOPx>=10&&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)/*清除原有的直線*/setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*左上角坐標減小*/TOPx-=5;TOPy-=5;/*右下角坐標增加*/BOTTOMx+=5;BOTTOMy+=5;/*繪制放大后的矩形*/rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*縮小矩形*/if(key=P
44、AGEDOWN)if(TOPx>=10&&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*左上角坐標增加*/TOPx+=5;TOPy+=5;/*右下角坐標減小*/BOTTOMx-=5;BOTTOMy-=5;/*繪制縮小后的矩形*/rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*左移矩形*/if(key=LEFT)if(TOPx>=10&
45、;&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*橫坐標減小*/TOPx-=5;BOTTOMx-=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*右移矩形*/if(key=RIGHT)if(TOPx>=10&&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)s
46、etwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*橫坐標增加*/TOPx+=5;BOTTOMx+=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*下移矩形*/if(key=DOWN)if(TOPx>=10&&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*縱坐標增加*/TOP
47、y+=5;BOTTOMy+=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*上移矩形*/if(key=UP)if(TOPx>=10&&TOPy>=40&&BOTTOMx<=620&&BOTTOMy<=445)setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*縱坐標減小*/TOPy-=5;BOTTOMy-=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);DrawMouse(x1,y1);Dr
48、awMouse(last_x,last_y);/*用直線法生成圓*/voidLineToCircle(intx0,inty0,intr)intangle;intx1,y1,x2,y2;angle=0;x1=r*cos(angle*pi/180);y1=r*sin(angle*pi/180);while(angle<45)angle+=5;x2=r*cos(angle*pi/180);y2=r*sin(angle*pi/180);while(x2=x1)x2+;while(y2=y1)y2+;line(x0+x1,y0+y1,x0+x2,y0+y2);line(x0-x1,y0+y1,x0
49、-x2,y0+y2);line(x0+x1,y0-y1,x0+x2,y0-y2);line(x0-x1,y0-y1,x0-x2,y0-y2);line(x0+y1,y0-x1,x0+y2,y0-x2);line(x0+y1,y0+x1,x0+y2,y0+x2);line(x0-y1,y0-x1,x0-y2,y0-x2);line(x0-y1,y0+x1,x0-y2,y0+x2);x1=x2+1;y1=y2+1;/*繪制圓函數(shù)*/voidDrawCircle()intx0,y0,x1,y1,r,oldr;intlast_x,last_y;intendFlag;intkey;last_x=0;la
50、st_y=0;endFlag=0;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;/*單擊左鍵,開始
51、繪制圓*/if(mouseStatus(&x0,&y0)=LEFT_PRESSED)/*計算半徑*/r=sqrt(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1);DrawMouse(last_x,last_y);LineToCircle(x0,y0,r);last_x=x1;last_y=y1;oldr=r;/*按住鼠標左鍵不動,拖動鼠標繪制圓*/while(mouseStatus(&x1,&y1)=LEFT_PRESSED)if(last_x!=x1|last_y!=y1)r=sqrt(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)
52、;LineToCircle(x0,y0,oldr);LineToCircle(x0,y0,r);last_x=x1;last_y=y1;oldr=r;/*繪制結(jié)束后,記錄圓的圓心和半徑*/Rx=x0;Ry=y0;R=r;while(1)key=bioskey(0);if(key=ESC)break;/*放大圓*/if(key=PAGEUP)if(Rx-R>10&&Ry-R>40&&Rx+R<620&&Ry+R<445)/*如果半徑和初始狀態(tài)一樣大,則保留原來的圓*/if(R=r)setcolor(WHITE);R+=10;
53、circle(Rx,Ry,R);elsesetcolor(BLACK);/*用背景色畫圓,覆蓋原有的*/circle(Rx,Ry,R);/*增加半徑*/R+=10;setcolor(WHITE);/*繪制新圓*/circle(Rx,Ry,R);/*縮小圓*/if(key=PAGEDOWN)if(Rx-R>10&&Ry-R>40&&Rx+R<620&&Ry+R<445)*/*如果半徑和初始狀態(tài)一樣大,則保留原來的圓if(R=r)setcolor(WHITE);R-=10;circle(Rx,Ry,R);elsesetcolo
54、r(BLACK);/*用背景色畫圓,覆蓋原有的*/circle(Rx,Ry,R);setcolor(WHITE);/*減小半徑*/R-=10;circle(Rx,Ry,R);DrawMouse(x1,y1);DrawMouse(last_x,last_y);/*求階乘函數(shù)*/longfactorial(intn)longs=1;if(n=0)return1;while(n>0)s*=n;n-;returns;/*伯恩斯坦基函數(shù)*/floatberFunction(inti,intn,doublet)if(i=0&&t=0|t=1&&i=n)return1;
55、elseif(t=0|t=1)return0;returnfactorial(n)/(factorial(i)*factorial(n-i)*pow(t,i)*pow(1-t,n-i);/*繪制Bezier曲線函數(shù)*/voidDrawBezier()intx,y,x0,y0,x1,y1;floatj,t,dt;inti,n;intendFlag=0;intlast_x=0,last_y=0;n=0;DrawMouse(last_x,last_y);while(mouseStatus(&x1,&y1)=LEFT_PRESSED);while(1)while(mouseStatus
56、(&x1,&y1)=RIGHT_PRESSED)endFlag=1;if(endFlag=1)break;/*如果有兩個以上的點,則將其連接,即畫直線*/if(n>1)line(linePoint_xn-1,linePoint_yn-1,linePoint_xn-2,linePoint_yn-2);/*移動鼠標*/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;/*單擊左鍵時,繪制點*/while(mouseStatus(&x0,&y0)=LEFT_PRESSED);putpixel(x0,y0,14);/*記錄每次鼠標左鍵單擊的點坐標*/linePoint_xn=x0;linePoint_yn=y0;n+;DrawMouse(x1,y1);dt=1.0/10;setwritemode(0);for(j=0;j<=10;j+=0.5)t=j*dt;x=0;y=0;i=0;while(i<n-1)x+=berFunction(i,n-2,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視錄放設(shè)備的智能追蹤優(yōu)化技術(shù)進步考核試卷
- 小型印刷設(shè)備在廣告制作中的應(yīng)用考核試卷
- 合成材料在印刷電子技術(shù)中的應(yīng)用考核試卷
- 秘書工作流程優(yōu)化方案計劃
- 居間房屋合同范本
- 原輔料合同范本
- 科技助力打造智慧景區(qū)生態(tài)圈
- 幼兒園游戲化教學(xué)的研究計劃
- 睡眠質(zhì)量與飲食營養(yǎng)的密切關(guān)系
- 幼兒道德教育課程設(shè)計計劃
- 腫瘤科疼痛一病一品
- 2024-2030年中國礦用錨桿行業(yè)發(fā)展現(xiàn)狀需求分析報告
- 2024年1月浙江省高考英語真題試卷含答案
- 人民醫(yī)院樣本外送檢測管理制度
- DG-TJ 08-2451-2024 電動自行車集中充電和停放場所設(shè)計標準
- DB3301-T 65.28-2024 反恐怖防范系統(tǒng)管理規(guī)范 第28部分:硬質(zhì)隔離設(shè)施
- 11BS4排水工程華北標圖集
- 電子備課教案(一二年級體育)
- 湖北省武漢市漢陽區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- DL-T5394-2021電力工程地下金屬構(gòu)筑物防腐技術(shù)導(dǎo)則
- 2024年心理咨詢師考試題庫附參考答案(綜合題)
評論
0/150
提交評論