




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、機(jī)床數(shù)控技術(shù)課程設(shè)計(jì)說(shuō)明書機(jī)電學(xué)院 機(jī)械工程及自動(dòng)化專業(yè) 目 錄一、 設(shè)計(jì)任務(wù)-3二、 設(shè)計(jì)要求-3三、 程序設(shè)計(jì)流程圖-3四、 程序設(shè)計(jì)源程序-7五、 程序中有待改進(jìn)的地方-16六、 課程設(shè)計(jì)感想-16一 設(shè)計(jì)任務(wù)1、直線插補(bǔ):PL2逐點(diǎn)比較法插補(bǔ)第二象限直線;2、圓弧插補(bǔ):DA32 DDA法插補(bǔ)第32象限逆圓弧;3、撰寫設(shè)計(jì)說(shuō)明書一份。二 設(shè)計(jì)要求1、具有數(shù)據(jù)輸入界面,如起點(diǎn)、終點(diǎn)、圓心、半徑及插補(bǔ)步長(zhǎng)等;2、具有插補(bǔ)過(guò)程的動(dòng)態(tài)顯示功能,如單步插補(bǔ)、連續(xù)插補(bǔ);3、插補(bǔ)的步長(zhǎng)可調(diào);4、編程語(yǔ)言自定,建議使用C語(yǔ)言或VB。三 程序設(shè)計(jì)流程圖1、逐點(diǎn)比較法直線插補(bǔ) 逐點(diǎn)比較法的直線插補(bǔ)過(guò)程,每一
2、步都要經(jīng)過(guò)四個(gè)步驟:偏差判別坐標(biāo)進(jìn)給偏差計(jì)算終點(diǎn)判別 第一象限逐點(diǎn)比較法的偏差判別公式為: Fi,j0時(shí),Fi+1,j=Fi,j-ye; Fi,jx, |y2-y1|-y, E=(x+y)/step終點(diǎn)在起點(diǎn)右上方終點(diǎn)在起點(diǎn)左上方終點(diǎn)在起點(diǎn)左下方終點(diǎn)在起點(diǎn)右下方NF=0+X向走一步FF+x+X向走一步FF-yNF=0E=E-1E=0 ?+X向走一步FF-yYNF=0E=E-1E=0 ?NF=0-Y向走一步FF+x插補(bǔ)其他象限的直線,只需將終點(diǎn)相對(duì)起點(diǎn)的坐標(biāo)差值去絕對(duì)值,然后改變進(jìn)給方向即可。圖一 逐點(diǎn)比較法直線插補(bǔ)的程序流程圖NNN輸入直線起點(diǎn)坐標(biāo)(x1,y1)、終點(diǎn)坐標(biāo)(x2,y2)、步長(zhǎng)s
3、tep。判斷直線的走向向|x2-x1|-x,|y2-y1|-y, 累加次數(shù)E-m,JRx-0,Jryx, |y2-y1|-y, 累加次數(shù)E-m,JRx0,Jry0; Exx,Eyy, JRxJRx+y , JRyJRy+xEx=0且Ey=0NY繪圖完畢輸入圓弧起點(diǎn)坐標(biāo)(x1,y1)、終點(diǎn)坐標(biāo)(x2,y2)、圓心坐標(biāo)(x0,y0),步長(zhǎng)step。第一象限逆時(shí)針順時(shí)針順、逆時(shí)針選擇象限判斷其他象限和第一象限處理方法相同。逆時(shí)針處理方法相同。圖三 DDA法圓弧插補(bǔ)的程序流程圖四 程序設(shè)計(jì)主要源程序本設(shè)計(jì)采用C語(yǔ)言設(shè)計(jì)。#include#include#includemain() void menu(
4、); /*菜單顯示函數(shù)聲明*/ void line_pcm(); /*逐點(diǎn)比較法直線插補(bǔ)函數(shù)聲明*/ void line_DDA(); /*DDA法直線插補(bǔ)函數(shù)聲明*/ circle_DDA(); /*DDA圓弧插補(bǔ)函數(shù)聲明*/ int n; int gdriver=DETECT,gmode; /*顯示適配器的圖形模式初始化*/ initgraph(&gdriver,&gmode,); do menu(); scanf(%d,&n); switch(n) /*函數(shù)功能的選擇*/ case 1:line_DDA(); system(pause); break; case 2:line_pcm()
5、; system(pause); break; case 3:circle_DDA(); system(pause); break; /* case 4:circle_pcm(); system(pause); break;*/ case 0:return; while(n!=0); /*菜單顯示函數(shù)*/void menu()system(cls); printf(nPlease make a choice:n); printf( 1 Draw a line using DDA method;n); printf( 2 Draw a line using Point-wise comparis
6、on method;n); printf( 3 Draw a circle suing DDA method;n); printf( 4 Draw a circle suing Point-wise comparison method;n); printf( 0 Quitn); printf(choice:); /*繪制坐標(biāo)軸*/axis()int i; setcolor(RED); rectangle(150,100,550,400); line(350,100,350,400); line(150,250,550,250); for(i=160;i=540;i=i+10) putpixel
7、(i,250,2); for(i=110;iy) E=2*x; else E=2*y; moveto(x1+350,250-y1); if(ye=0) if(xe=0) /*ye=0,xe=0 為第一象限*/ for(i=0;i=E) JRx-=E; x1+=step; if(JRy=E) JRy-=E; y1+=step; lineto(x1+350,250-y1); else for(i=0;i=0,xe=E) JRx-=E; x1-=step; if(JRy=E) JRy-=E; y1+=step; lineto(x1+350,250-y1); else if(xe=0) /*ye=0
8、為第三象限*/ for(i=0;i=E) JRx-=E; x1-=step; if(JRy=E) JRy-=E; y1-=step; lineto(x1+350,250-y1); else for(i=0;iE/step;i+) /*ye0,xe=E) JRx-=E; x1+=step; if(JRy=E) JRy-=E; y1-=step; lineto(x1+350,250-y1); /*逐點(diǎn)比較法直線插補(bǔ)程序*/void line_pcm() int i; int x1,y1,x2,y2,step,xe,ye,x,y,E; float F=0.0; system(cls); printf
9、(n please input the first point:X1=); /*輸入直線的起點(diǎn)(x1,y1)、終點(diǎn)(x2,y2)、步長(zhǎng)(step)*/ scanf(%d,&x1); printf(Y1=); scanf(%d,&y1); printf( please input the end point:X2=); scanf(%d,&x2); printf(Y2=); scanf(%d,&y2); printf( input step:nstep=); scanf(%d,&step); axis(); moveto(x2+350,250-y2); lineto(x1+350,250-y1)
10、; /*畫待插補(bǔ)的直線*/ xe=x2-x1;ye=y2-y1; /*xe為終點(diǎn)坐標(biāo)與起點(diǎn)坐標(biāo)x方向的差值,ye為終點(diǎn)坐標(biāo)與起點(diǎn)坐標(biāo)y方向的差值*/ x=abs(xe);y=abs(ye); /*x,y 為xe,ye 的絕對(duì)值*/ E=(x+y)/step; if(ye=0) if(xe=0) /*ye=0,xe=0 為第一象限*/ for(i=0;i=0) F=F-step*y; linerel(step,0); else F=F+step*x; linerel(0,-step); else for(i=0;i=0,xe=0) F=F-step*y; linerel(-step,0); el
11、se F=F+step*x; linerel(0,-step); else if(xe=0) /*ye=0 為第三象限*/ for(i=0;i=0) F=F-step*y; linerel(-step,0); else F=F+step*x; linerel(0,step); else for(i=0;iE;i+) /*ye0,xe=0) F=F-step*y; linerel(step,0); else F=F+step*x; linerel(0,step); int two(int E) /*確定寄存器位數(shù)*/ int reg; if(E=8&E=16&E=32&E=64&E=128&Ex
12、1)&(y2=y0) /*判斷圓弧終點(diǎn)是否在第一象限*/ ddaclockwise4(x0+r,y0,x2,y2,x0,y0,step); /*不在第一象限調(diào)用第四象限順時(shí)針插補(bǔ)函數(shù)*/ x2=x0+r; y2=y0; /*第一象限的終點(diǎn)的坐標(biāo)確定*/ x=abs(x1-x0); y=abs(y1-y0); xe=x2-x1;ye=y2-y1; if(abs(xe)=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0
13、) JRx+=y; JRy+=x; xi=0;yi=0; if(JRx=E) JRx-=E; x+=step; Ex-; xi=step; if(JRy=E) JRy-=E; y-=step; Ey-; yi=step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2);/*DDA法順時(shí)針插補(bǔ)起點(diǎn)在第二象限的圓弧*/ddaclockwise2(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; if(!(
14、x2y1) ddaclockwise1(x0,y0+r,x2,y2,x0,y0,step); x2=x0;y2=y0+r; x=abs(x1-x0); y=abs(y1-y0); xe=x2-x1;ye=y2-y1; if(abs(xe)=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; xi=0;yi=0; if(JRx=E) JRx-=E; x-=step; Ex-; xi=step; JRy
15、+=x; if(JRy=E) JRy-=E; y+=step; Ey-; yi=-step; if(xi!=0|yi!=0) linerel(xi,yi); /*lineto(350+x2,250-y2);*/*DDA法順時(shí)針插補(bǔ)起點(diǎn)在第三象限的圓弧*/ddaclockwise3(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; if(!(x2x1&y2=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)
16、/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; xi=0;yi=0; if(JRx=E) JRx-=E; x+=step; Ex-; xi=-step; JRy+=x; if(JRy=E) JRy-=E; y-=step; Ey-; yi=-step; if(xi!=0|yi!=0) linerel(xi,yi); /*lineto(350+x2,250-y2);*/*DDA法順時(shí)針插補(bǔ)起點(diǎn)在第四象限的圓弧*/ddaclockwise4(int x1,int y1,int x2,int y2,int
17、 x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; printf(%d %d %d %d %d %d %d,x1,y2,x2,y2,x0,y0,step); if(!(x2=x0&y2=abs(ye) E=two(abs(ye); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; xi=0;yi=0; if(JRx=E) JRx-=E; x-=step; Ex-; xi=
18、-step; JRy+=x; if(JRy=E) JRy-=E; y+=step; Ey-; yi=step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2);/*DDA法逆時(shí)針插補(bǔ)起點(diǎn)在第一象限的圓弧*/ddaanticlock1(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; /*E 寄存器數(shù);Ex,Ey終點(diǎn)判別計(jì)數(shù)器;x,y相對(duì)坐標(biāo)中瞬時(shí)坐標(biāo)值;*/ /*xe,ye終點(diǎn)與起點(diǎn)的坐標(biāo)差值;xi,
19、yi進(jìn)給脈沖*/ if(!(y2y1)&(x2=x0) /*(x2x0|y2=x1&y1=y2) */ /*判斷圓弧終點(diǎn)是否在第一象限*/ ddaanticlock2(x0,y0+r,x2,y2,x0,y0,step); /*不在第一象限調(diào)用第四象限順時(shí)針插補(bǔ)函數(shù)*/ x2=x0;y2=y0+r; x=abs(x1-x0); y=abs(y1-y0); xe=x2-x1;ye=y2-y1; if(abs(xe)=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),
20、(250-y1); while(Ex0|Ey0) JRx+=y; JRy+=x; xi=0;yi=0; if(JRx=E) JRx-=E; x-=step; Ex-; xi=-step; if(JRy=E) JRy-=E; y+=step; Ey-; yi=-step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2);/*DDA法逆時(shí)針插補(bǔ)起點(diǎn)在第二象限的圓弧*/ddaanticlock2(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye
21、,xi,yi,JRx=0,JRy=0; if(x2x0|y2=x1&y2=y1) ddaanticlock3(x0-r,y0,x2,y2,x0,y0,step); x2=x0-r;y2=y0; x=abs(x1-x0); y=abs(y1-y0); xe=x2-x1;ye=y2-y1; if(abs(xe)=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; JRy+=x; xi=0;yi=0; i
22、f(JRx=E) JRx-=E; x+=step; Ex-; xi=-step; if(JRy=E) JRy-=E; y-=step; Ey-; yi=step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2);/*DDA法逆時(shí)針插補(bǔ)起點(diǎn)在第三象限的圓弧*/ddaanticlock3(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; if(x2x0|y2y0)|(x2=y1) ddaanticlock
23、4(x0,y0-r,x2,y2,x0,y0,step); x2=x0;y2=y0-r; x=abs(x1-x0); y=abs(y1-y0); xe=x2-x1;ye=y2-y1; if(abs(xe)=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; JRy+=x; xi=0;yi=0; if(JRx=E) JRx-=E; x-=step; Ex-; xi=step; if(JRy=E) JRy
24、-=E; y+=step; Ey-; yi=step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2); /*DDA法逆時(shí)針插補(bǔ)起點(diǎn)在第四象限的圓弧*/ddaanticlock4(int x1,int y1,int x2,int y2,int x0,int y0,int step) int E,Ex,Ey,x,y,xe,ye,xi,yi,JRx=0,JRy=0; if(!(x2x1)&(y2=y0)/*(x2y0)|(x2=x1&y2=abs(ye) E=two(abs(xe); else E=two(abs(ye); Ex=abs(
25、xe)/step; Ey=abs(ye)/step; moveto(350+x1),(250-y1); while(Ex0|Ey0) JRx+=y; JRy+=x; xi=0;yi=0; if(JRx=E) JRx-=E; x+=step; Ex-; xi=step; if(JRy=E) JRy-=E; y-=step; Ey-; yi=-step; if(xi!=0|yi!=0) linerel(xi,yi); lineto(350+x2,250-y2);/*DDA法繪制順時(shí)針圓弧*/ddacircle_clock(int x1,int y1,int x2,int y2,int x0,int
26、 y0,int step) putpixel(350+x0),(250-y0),2); setcolor(1); circle(x0+350),(250-y0),r); setcolor(2); if(x1=x0&y1y0) ddaclockwise1(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在第一象限*/ else if(x1=y0) ddaclockwise2(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在第二象限*/ else if(x1=x0&y1x0&y1=y0) ddaanticlock1(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在
27、第一象限*/ else if(x1y0) ddaanticlock2(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在第二象限*/ else if(x1x0&y1=y0) ddaanticlock3(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在第三象限*/ else ddaanticlock4(x1,y1,x2,y2,x0,y0,step); /*起點(diǎn)在第四象限*/ /*DDA法繪制任意圓弧主函數(shù)*/void circle_DDA()int step,d; int x1,y1,x2,y2,x0,y0; system(cls); printf(n please inp
28、ut the first point:X1=); scanf(%d,&x1); printf(Y1=); scanf(%d,&y1); printf( please input the end point:X2=); scanf(%d,&x2); printf(Y2=); scanf(%d,&y2); printf( please input the center of the circle:X0=); scanf(%d,&x0); printf(Y0=); scanf(%d,&y0); printf( input step:nstep=); scanf(%d,&step); printf(Choose a direction:n); printf( 1 clockwise circle;n); printf( 2 anticlockwise circle;n); scanf(%d,&d); axis(); R=sqrt(x1-x0)*(x1-x0)+(y1-y0)*(y1-y0); r=(int)R; if(d=1) ddacircle_clock(x1,y1,x2,y2,x0,y0,step); if(d=2) ddacircle_anticlock(x1,y1,x2,y2,x0,y0,step); getch();五 程序中有待改進(jìn)的地方本插補(bǔ)程序所具備
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢學(xué)院《城鄉(xiāng)空間分析與規(guī)劃新技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海健康醫(yī)學(xué)院《城市經(jīng)濟(jì)分析方法(雙語(yǔ))》2023-2024學(xué)年第二學(xué)期期末試卷
- 濰坊學(xué)院《創(chuàng)意文化產(chǎn)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 泰山學(xué)院《幼兒保健學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 南陽(yáng)職業(yè)學(xué)院《景觀設(shè)計(jì)快題表達(dá)》2023-2024學(xué)年第二學(xué)期期末試卷
- 石屏縣2024-2025學(xué)年三下數(shù)學(xué)期末調(diào)研模擬試題含解析
- 確山縣2025年數(shù)學(xué)三下期末監(jiān)測(cè)模擬試題含解析
- 江西水利職業(yè)學(xué)院《燃?xì)馀c蒸汽聯(lián)合循環(huán)》2023-2024學(xué)年第二學(xué)期期末試卷
- 二零二五版家具買賣合同樣式
- 酒店投資協(xié)議書范例二零二五年
- Unit 4 Healthy food B Lets learn(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)下冊(cè)
- 《知不足而后進(jìn) 望山遠(yuǎn)而力行》期中家長(zhǎng)會(huì)課件
- 《自由飛翔之鳥(niǎo)》教學(xué)課件-2024-2025學(xué)年嶺南美版(2024)初中美術(shù)七年級(jí)下冊(cè)
- 專題09 鄉(xiāng)村和城鎮(zhèn)-五年(2019-2023)高考地理真題分項(xiàng)匯編(解析版)
- 2025年第三屆天揚(yáng)杯建筑業(yè)財(cái)稅知識(shí)競(jìng)賽題庫(kù)附答案(201-300題)
- 2025-2030中國(guó)電動(dòng)車行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報(bào)告
- 2025租賃合同(辦公室)中文版英文版
- 2025春新七年級(jí)道德與法治下冊(cè)全冊(cè)知識(shí)點(diǎn)
- Unit 9 Active learning 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高中英語(yǔ)北師大版(2019)必修第三冊(cè)
- 2025上海無(wú)固定期限勞動(dòng)合同范本
- 城市道路養(yǎng)護(hù)雨季應(yīng)對(duì)措施
評(píng)論
0/150
提交評(píng)論