研究和實現(xiàn)Visual C++的動態(tài)控制


 


動點坐標XY坐標對t的積分, YX坐標對t的積分。因此, 由ΔX的疊加產(chǎn)生的溢出去進給Y; 由ΔY的疊加產(chǎn)生的溢出去進給X。圓弧積分器的原理圖如圖2所示[1]。

求積前, Xi、 Yi中預置圓弧的起點坐標X0 Y0, 并作左移規(guī)格化處理。疊加過程中, 每進給一步動點坐標應作相應的修改, 即: Xi±1XiYi±1Yi。修改中是作加l還是減1的運算應當視圓弧所處的象限而定。


具體方法是, 設置JVx、 JVy為積分函數(shù)寄存器, JRx、 JRy為余數(shù)寄存器。在起點時, JVxJvy分別寄存起始坐標X0、 Y0,對于第一象限逆圓來說, 在插補過程中, JRy每溢出一個Δy脈沖, JVx應該加1; JRx每溢出一個Δx脈沖, JVy應減1。對于其他各種情況的DDA法圓弧插補, JVxJvy是加1還是減1 取決于動點坐標所在象限及圓弧走向[2]。

對不同象限坐標修正見表1



2.2 程序?qū)崿F(xiàn)

給類CCircleView增加數(shù)據(jù)成員:

CPoint endPoint; //起點 (點1

CPoint startPoint; //終點 (點2

int m[20000][2]; //存儲動點坐標的二維數(shù)組

給類CCircleView增加成員函數(shù):

void change(int x, int *a); //為二維數(shù)組賦值

change()成員函數(shù)中設置部分變量:

int sumx; //x坐標累加器

int sumy; //y坐標累加器

int q; //累加器容量

int flag; //是否溢出標志

int xi,yi; //x,y坐標值

以下給出部分程序代碼。

DDA法實現(xiàn)圓的插補—確定各動點的坐標, 并存儲在

二維數(shù)組m[][]中:

void CCircleView::change(int x, int *a)

{ int sumx, sumy, q, j, flag;

int xi,yi;

sumx=0; sumy=0; j=1;

xi=x; yi=0;

q=4096;

for(j=1; j<=q; j++)

{ m[j][0]=0; m[j][1]=0; }

j=1;

while(xi>0)

{ sumx+=xi; sumy+=yi; flag=0;

if(sumx>=q)

{ yi++; m[j][1]=yi; m[j][0]=xi; sumx-=q; flag=1; }

if(sumy>=q)

{ xi--; m[j][0]=xi; m[j][1]=yi; sumy-=q; flag=1; }

if(flag==1) j++;

}

*a=j-1;

}

鼠標左鍵拖動后松開觸發(fā)OnLButtonUp成員函數(shù)代碼[3]

void CCircleView::OnLButtonUp(UINT nFlags, CPoint point)

{ blsDown=false;

CClientDC dc(this);

dc.Ellipse(&rect);

int center_x=(startPoint.x+endPoint.x)/2, center_y=(startPoint.

y+endPoint.y)/2;

double r=sqrt(abs((endPoint.x-startPoint.x)*

(endPoint.x-startPoint.x))+abs((endPoint.y-startPoint.y)*

(endPoint.y-startPoint.y)))/2;

int x0=center_x+0, y0=center_y+0;

int *num,b,i; num=&b;

change(r,num);

m[0][0]=r; m[0][1]=0; CClientDC dc1(this);

CPen pen(PS_SOLID,1,RGB(0,255,255));

dc1.SelectObject(&pen);

dc1.MoveTo(x0+r,y0) ;

//第一象限

for(i=1;i<=*num;i++)

{ dc1.LineTo(x0+m[i][0],y0+m[i][1]);

for(long j=0; j<=999999; j++);

}

//第二象限

for(i=*num; i>=0; i--)

{ dc1.LineTo(x0-m[i][0],y0+m[i][1]);

for(long j=0; j<=999999; j++);

}

//第三象限

for(i=0; i<=*num; i++)

{ dc1.LineTo(x0-m[i][0],y0-m[i][1]);

for(long j=0; j<=999999; j++);

}

//第四象限

for(i=*num; i>=0; i--)

{ dc1.LineTo(x0+m[i][0],y0-m[i][1]);

for(long j=0; j<=999999; j++);

}

CView::OnLButtonUp(nFlags, point);

}

2.3 系統(tǒng)運行的結果

系統(tǒng)采用Visual C++6.0可視化開發(fā)工具編程, 實現(xiàn)了直線和圓弧插補算法。圓弧插補算法編譯運行后的仿真結果如圖4所示。

本文由 伯特利數(shù)控文章 整理發(fā)表,文章來自網(wǎng)絡僅參考學習,本站不承擔任何法律責任。

http://www.bethel-cnc.com/bethel/news/

 


 

標簽: 系統(tǒng)  繪圖  
上一篇基于源碼組裝技術的嵌入式軟件系統(tǒng)的研究
下一篇數(shù)控車上刀具 鉆頭 的對刀和夾具的設計

系統(tǒng)  繪圖  相關內(nèi)容

——

03

2018-11

加工中心能耗模型及其加工優(yōu)化的思考

0 引言能源是我國機械制造業(yè)發(fā)展的必要條件,但數(shù)控加工中心在運行的過程中資源浪費情況較為嚴重,進而在這一過程中,為了能夠降低資源的消耗量,需要對數(shù)控加工中心進行合理優(yōu)化,使工作人員在對對數(shù)控加工中心進行加工的過程中,提高工作效率,減少勞動量,另外,為了提高數(shù)控加工中心的工作效率,… [了解更多]

03

2018-11

數(shù)控銑床加工模具零件的工藝要點

[了解更多]

31

2018-10

實驗用4軸數(shù)控加工中心的開發(fā)

隨著 數(shù)控 技術的出現(xiàn),不同形式的數(shù)控加工設備相繼使用在各個生產(chǎn)行業(yè),例如,數(shù)控 車床、加工中心以及數(shù)控 加工中心等,而且目前 數(shù)控 技術已經(jīng)向智能化方向發(fā)展[1-2]。在這樣的形勢下,數(shù)控 機床的設計與組裝已經(jīng)成為本科機電專業(yè)學生的重要實踐課程。通過設計與組裝,學生不僅可以掌握… [了解更多]

30

2018-10

淺談數(shù)控加工中心加工特殊零件的夾具

隨著制造業(yè)的不斷發(fā)展,數(shù)控加工中心在制造領域中發(fā)揮著重要 的作用。夾具在數(shù)控加工中心加工過程中,一方面是對待加工零件進 行夾緊,防止其在加工過程中移位;另一方面是對零件起到定位 作用。尤其是在加工特殊零件時,合適的夾具可以更好的保證加 工精度,使加工過程更為流暢、高效,也能夠有效… [了解更多]

29

2018-10

數(shù)控加工中心上孔的加工方法

1 以銑代鉆加工孔的重要意義在傳統(tǒng)的孔加工中,一般的孔加工方法是鉆中心孔—鉆孔—擴孔(鉸孔)—鏜孔等方式才可滿足孔的加工要求,對于在數(shù)控加工中心上的多孔加工,這種孔的加工方式勢必會降低加工效率,加大勞動強度,提高加工成本,除此之外,由于鉆頭剛性差,扭矩和軸向力等方面的問題, 在加… [了解更多]


產(chǎn)品中心

——