男人天堂影院-第九色-日本黄色免费视频-日韩一区二区三区电影-日本三级韩国三级美三级91-特黄一级视频-91日韩欧美-91精产国品一二三-欧美午夜精品久久久久久人妖-国产美女又黄又爽又色视频免费-日韩欧美国产亚洲-亚州综合视频-干干日日-玖玖热在线视频-欧美天堂网站

海天精工機床有限公司 海天精工博客

研究和實現Visual C++的動態控制

動點坐標X是Y坐標對t的積分, 而Y是X坐標對t的積分。因此, 由ΔX的疊加產生的溢出去進給Y; 由ΔY的疊加產生的溢出去進給X。圓弧積分器的原理圖如圖2所示[1]。求積前, Xi、 Yi中預置圓弧的起點坐標X0、 Y0, 并作左移規格化處理。疊加過程中, 每進給一步動點坐標應作相應的修改, 即: Xi±1→Xi或Yi±1→Yi。修改中是作加l還是減1的運算應當視圓弧所處的象限而定。具體方法是, 設置JVx、 JVy為積分函數寄存器, JRx、 JRy為余數寄存器。在起點時, JVx和Jvy分別寄存起始坐標X0、 Y0,對于第一象限逆圓來說, 在插補過程中, JRy每溢出一個Δy脈沖, JVx應該加1; JRx每溢出一個Δx脈沖, JVy應減1。對于其他各種情況的DDA法圓弧插補, JVx和Jvy是加1還是減1, 取決于動點坐標所在象限及圓弧走向[2]。對不同象限坐標修正見表1。2.2 程序實現給類CCircleView增加數據成員:CPoint endPoint; //起點 (點1)CPoint startPoint; //終點 (點2)int m[20000][2]; //存儲動點坐標的二維數組給類CCircleView增加成員函數:void change(int x, int *a); //為二維數組賦值在change()成員函數中設置部分變量:int sumx; //x坐標累加器int sumy; //y坐標累加器int q; //累加器容量int flag; //是否溢出標志int xi,yi; //x,y坐標值以下給出部分程序代碼。用DDA法實現圓的插補—確定各動點的坐標, 并存儲在二維數組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;}鼠標左鍵拖動后松開觸發OnLButtonUp成員函數代碼[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 系統運行的結果系統采用Visual C++6.0可視化開發工具編程, 實現了直線和圓弧插補算法。圓弧插補算法編譯運行后的仿真結果如圖4所示。本文由海天精工文章整理發表,文章來自網絡僅參考學習,本站不承擔任何法律責任。http://www.97jkb.cn/
留言列表
發表留言
◎歡迎參與討論,請在這里發表您的看法、交流您的觀點。

主站蜘蛛池模板: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |