- #include "conio.h"
- #include "graphics.h"
- #include "process.h"
- #define Ni_circle 0
- #define Shun_circle 1
- void init_graph();
- void draw_Base_circle();
- void draw_cabu_circle();
- void close_graph();
- void acrroods();
- static float x0,y0;
- void line_cabu(), draw_line(),draw_line_cabu();
- void line_cabu() /*此函數控制直線插步兩次*/
- { int i;
- init_graph();
- sleep(1);
- for(i=0;i<2;i++) {
- line(0,120,300,120); outtextxy(310,120,"Z");
- line(100,10,100,300); outtextxy(110,300,"X");
- outtextxy(90,130,"O");
- draw_line();
- if(i==0)
- draw_line_cabu(6);
- else draw_line_cabu(2);
- gotoxy(50,5);
- getch();
- cleardevice();
- setcolor(WHITE);
- }
- }
- void draw_line()/*畫直線*/
- {
- line(100,120,600,450);
- textcolor(YELLOW);
- directvideo=0;
- gotoxy(45,5); cprintf("Line from:X0 Y0 Z0 ");
- gotoxy(45,6); cprintf("Line to :X500 Y0 Z330");
- gotoxy(45,7); cprintf("Units :Pixel");
- gotoxy(45,8); cprintf("Line now:");
- }
- void draw_line_cabu(int step)/*關鍵的直線插補函數*/
- {
- int Xe=600,Ye=450;
- float Fm,Xm=100,Ym=120;
- setcolor(RED);
- moveto(Xm,Ym);
- while(Xm<=Xe&&Ym<=Ye)
- {
- Fm=(Ym-120)*(Xe-100)-(Xm-100)*(Ye-120);
- if(Fm>=0)
- Xm=Xm+step;
- else
- Ym=Ym+step;
- lineto(Xm,Ym);
- gotoxy(55,8); printf("X%3.0f Y0 Z%3.0f",Xm-100,Ym-120);
- delay(1100);
- }
- }
- /* 圓插補部分的函數區*/
- void init_graph() /*圖形系統初始化*/
- {
- int gdrive=DETECT,gmode;
- initgraph(&gdrive,&gmode,"");
- cleardevice();
- }
- void acrroods() /*屏幕中心坐標*/
- {
- x0=getmaxx()/2;
- y0=getmaxy()/2;
- } void draw_Base_circle() /*畫圓及寫參數*/
- {
- line(x0-200,y0,x0+200,y0); outtextxy(x0+220,y0,"Z");
- line(x0,y0-180,x0,y0+180); outtextxy(x0+10,y0+180,"X");
- outtextxy(x0-10,y0+10,"O");
- circle(x0,y0,150);
- textcolor(YELLOW);
- directvideo=0;
- gotoxy(46,2);cprintf("Circle start:X0 Y0 Z150");
- gotoxy(46,3);cprintf("Circle end :X0 Y0 Z150");
- gotoxy(46,4);cprintf("Units :Pixel");
- gotoxy(46,5);cprintf("Circle now:");
- }
- void close_graph() /*關圖形系統*/
- {
- closegraph();
- }
- void draw_cabu_circle(int sstep,int Directory)/*關鍵的圓插補函數*/
- {
- int flag=0;
- float Fm,Xm,Ym;
- Xm=x0+150; Ym=y0;
- moveto(Xm,Ym);
- setcolor(RED);
- while(1) /*分象限,順圓和逆圓討論*/
- {
- Fm=(Xm-x0)*(Xm-x0)+(Ym-y0)*(Ym-y0)-150*150;/*圓判斷公式*/
- if(Fm>=0){
- if(!Directory){ /*逆圓判斷*/
- if(Xm>=x0&&Ym<=y0)
- {
- if(flag) break; /*if語句判斷象限,以下一樣*/
- else Xm=Xm-sstep;
- }
- if(Xm<=x0&&Ym<=y0)
- {
- flag=1; Ym=Ym+sstep;
- }
- if(Xm<=x0&&Ym>=y0)
- Xm=Xm+sstep;
- if(Xm>=x0&&Ym>=y0)
- Ym=Ym-sstep;
- }
- else { /*it is Directory's else*/
- if(Xm>x0&&Ym<y0)
- Ym=Ym+sstep;
- if(Xm<=x0&&Ym<=y0)
- Xm=Xm+sstep;
- if(Xm<x0&&Ym>y0) {
- flag=1; Ym=Ym-sstep;}
- if(Xm>=x0&&Ym>=y0) {
- if(flag) break;
- Xm=Xm-sstep;}
- }
- }
- else{ /*it is Fm's else*/
- if(!Directory) {
- if(Xm>x0&&Ym<y0)
- {
- if(flag) break;
- else Ym=Ym-sstep;
- }
- if(Xm<=x0&&Ym<=y0)
- {
- flag=1; Xm=Xm-sstep;
- }
- if(Xm<=x0&&Ym>=y0)
- Ym=Ym+sstep;
- if(Xm>=x0&&Ym>=y0)
- Xm=Xm+sstep;
- }
- else{
- if(Xm>x0&&Ym<y0)
- Xm=Xm+sstep;
- if(Xm<=x0&&Ym<=y0)
- Ym=Ym-sstep;
- if(Xm<=x0&&Ym>=y0){
- flag=1; Xm=Xm-sstep;}
- if(Xm>=x0&&Ym>=y0) {
- if(flag) break;
- else Ym=Ym+sstep;}
- }
- }
- lineto(Xm,Ym);
- gotoxy(58,5); printf("X%3.0f Y0 Z%3.0f ",Ym-y0,Xm-x0);
- delay(800);
- }
- }
- void circle_demo(int Directory) /*控制圓插補兩次*/
- {
- int i=0,sstep;
- init_graph();
- sleep(2);
- acrroods(&x0,&y0);
- for(i=0;i<2;i++)
- {
- draw_Base_circle(150);
- if(i==0){
- sstep=6;
- draw_cabu_circle(sstep,Directory);}
- else{
- sstep=1;
- draw_cabu_circle(sstep,Directory);}
- getch();
- cleardevice();
- setcolor(WHITE);
- }
- }
- /* 圓插補部分的函數區結束*/
- main()/*主函數負責寫封面和函數調用*/
- {
- int choice=0;
- init_graph();
- while(choice!=4)
- {
- setfillstyle(1,RED);
- bar(200,30,400,80);
- setcolor(GREEN);
- settextstyle(3,0,10);
- outtextxy(220,50,"DEMO PROGRAM BY P.Y.F");
- setcolor(WHITE);
- settextstyle(0,0,1);
- outtextxy(200,120,"1. Line demo.");
- outtextxy(200,140,"2. Shun_Circle demo.");
- outtextxy(200,160,"3. Ni_Circle demo.");
- outtextxy(200,180,"4. Quit the program.");
- outtextxy(160,200,"Please enter your choice:"); gotoxy(46,13);
- scanf("%d",&choice);
- switch(choice)
- {
- case 1: line_cabu();break;
- case 2: circle_demo(Ni_circle);break;
- case 3: circle_demo(Shun_circle);break;
- case 4: break;
- default: printf("\nChoice wrong,try again!");
- }
- }
- close_graph();
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|