




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上課 程 設(shè) 計 報 告課程名稱 計算機圖形學(xué) 課題名稱 多邊形裁剪與填充 專 業(yè) 計算機科學(xué)與技術(shù) 班 級 計算機0902 學(xué) 號 姓 名 指導(dǎo)教師 劉長松 曹 燚 2012年 10 月 9 日湖南工程學(xué)院課 程 設(shè) 計 任 務(wù) 書課程名稱 計算機圖形學(xué) 課 題 多邊形裁剪與填充 專業(yè)班級 計算機0902 學(xué)生姓名 學(xué) 號 指導(dǎo)老師 劉長松 曹 燚 審 批 任務(wù)書下達日期 2012年 9月 15 日任務(wù)完成日期 2012 年 10月 9 日一、設(shè)計內(nèi)容與設(shè)計要求1設(shè)計內(nèi)容:交互式地實現(xiàn)多邊形的裁剪和填充。2設(shè)計要求:1)窗口功能設(shè)計。 2)實現(xiàn)鼠標(biāo)畫多邊形與數(shù)據(jù)存儲功
2、能。 3)實現(xiàn)鼠標(biāo)剪裁窗口選擇功能。4)實現(xiàn)多邊形裁剪和填充功能。3.算法提示:多邊形裁剪算法分析:基本思想是一次用窗口的一條邊裁剪多邊形,窗口的一條邊以及延長線構(gòu)成裁剪線,該線把平面分成兩個部分:可見一側(cè),不可見一側(cè)。用一條裁剪邊對多邊形進行裁剪,得到一個頂點序列,作為下一條裁剪邊處理過程的輸入點。對于每一條裁剪邊,只是判斷點在窗口的哪一測以及求線段與裁剪邊的交點算法應(yīng)隨之改變。多邊形填充算法分析:確定多邊形所占有的最大掃描線數(shù),得到多邊形頂點的最小和最大y值(ymin和ymax),從y=ymin 到 y=ymax, 每次用一條掃描進行填充。對一條掃描線填充的過程可分為四個步驟: a.求交b
3、.排序c.交點配對d.區(qū)間填色。二、進度安排第 3 周 星期一 8:0012:00星期二 8:0012:00 星期三 8:0012:00 星期四 8:0012:00 星期五 8:0012:00第 4 周 星期一 8:0012:00附:課程設(shè)計報告裝訂順序:封面、任務(wù)書、目錄、正文、附件(A4大小的圖紙及程序清單)、評分。 正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(xiàn)(至少要有一個主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對程序
4、寫出必要的注釋)。正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。一、題目內(nèi)容說明:1、交互式地實現(xiàn)多邊形的裁剪和填充。2、功能要求:1) 窗口功能設(shè)計。 2)實現(xiàn)鼠標(biāo)畫多邊形與數(shù)據(jù)存儲功能。 4)實現(xiàn)鼠標(biāo)剪裁窗口選擇功能。5) 實現(xiàn)多邊形裁剪和填充功能。二、總體設(shè)計:本程序使用MFC實現(xiàn)多邊形的裁剪和填充繪圖程序。多邊形裁剪算法分析:基本思想是一次用窗口的一條邊裁剪多邊形,窗口的一條邊以及延長線構(gòu)成裁剪線,改線把平面分成兩個部分:可見一側(cè),不可見一側(cè)。用一條裁剪邊多多邊形進行裁剪,得到一個頂點序列,作為嚇一條裁剪邊處理過程的輸入點。對于每一條裁剪邊,只是判斷點在窗口的哪一測以及求線段與裁剪
5、邊的交點算法應(yīng)隨之改變。僅用一條裁剪邊時,逐次多邊形裁剪框圖:在CGraphics類的CutRectangular(CRect)函數(shù)中實現(xiàn)對多邊形的裁剪多邊形填充算法分析:確定多邊形所占有的最大掃描線數(shù),得到多邊形頂點的最小和最大y值(ymin和ymax),從y=ymin 到 y=ymax, 每次用一條掃描進行填充。對一條掃描線填充的過程可分為四個步驟: a.求交b.排序c.交點配對d.區(qū)間填色。在CGraphics類中的FillPlogon函數(shù)中實現(xiàn)多邊形的填充算法。三、模塊設(shè)計:各個程序函數(shù)的功能,參數(shù),變量的說明:MFC應(yīng)用程序框架中類的詳細(xì)解析:1MainFrm:創(chuàng)建窗口及窗口里的菜單
6、、工具欄、狀態(tài)欄等實現(xiàn)交互的按鈕。1)函數(shù)int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)創(chuàng)建菜單、工具欄、狀欄。2)BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)設(shè)置窗口的大小和初始位置。2圖像裁剪View:視圖,負(fù)責(zé)內(nèi)存數(shù)據(jù)與用戶的交互,包括數(shù)據(jù)的顯示、菜單的選取,鼠標(biāo)的響應(yīng)。1. void CMyView:OnLButtonDown(UINT nFlags, CPoint point)對鼠標(biāo)按下左鍵的響應(yīng),如果是自定義裁剪的區(qū)域操作就捕獲鼠標(biāo)按下的點,畫裁剪區(qū)域,如果是
7、自定義點坐標(biāo)的操作就捕獲鼠標(biāo)的點畫多邊形。2. void CMyView:OnMouseMove(UINT nFlags, CPoint point)對 鼠標(biāo) 移動的響應(yīng)。用捕獲的點畫出相應(yīng)的矩形裁剪邊框。畫邊框的時候,先用白色擦出原先的矩形邊框,再用虛線畫出新的舉行邊框3. void CMyView:OnRButtonUp(UINT nFlags, CPoint point)對鼠標(biāo)放開左鍵的相應(yīng)。如果是自定義點的坐標(biāo),就獲取新的初始裁減矩形范圍。4. void CMyView:OnLButtonUp(UINT nFlags, CPoint point)對鼠標(biāo)放開左鍵的響應(yīng)5. void CM
8、yView:OnInitialUpdate()初始化裁剪區(qū)域和在窗口中畫一個矩形和一個五角星。6. void CMyView:OnDraw(CDC* pDC)重畫窗口,用voidCMyView:OnInitialUpdate來啟動它,通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。定義裁剪矩形區(qū)域,并賦值。當(dāng)自定義多邊形坐標(biāo)時,在各個點坐標(biāo)處畫一個小圓,以顯示點的位置。畫出多邊形。3圖像裁剪DOC:文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤的交互。1、 void CMyDoc:OnFillployon()2、 void CMyDoc:OnUpdateFillployon(CCmdUI* pCmdUI)3、
9、 void CMyDoc:OnCutRect()4、 void CMyDoc:OnUpdateCutRect(CCmdUI* pCmdUI)4.CGraphics:實現(xiàn)多邊形的填充和裁剪。1、 構(gòu)造函數(shù)CGraphics():PointCount(10),Point(NULL)初始化五角星的頂點坐標(biāo)。2、 析構(gòu)函數(shù)CGraphics()刪除動態(tài)生成的Point指針。3、 bool DrawPloyon(CDC*);在指定設(shè)備中畫多邊形。4、 bool FillPloyon(CDC*);填充多邊形。5、 bool InterCross(CPoint,CPoint,CPoint,CPoint,CP
10、oint&);判斷兩條線段是否相交。6、 bool CutRect(CRect);對多邊形進行裁剪。7、 bool IsInSquareRgn(CRect,CPoint,int);對多邊形裁剪時,判斷線段斷點是否在可視一側(cè)。8、 bool SortArray(int*,int);冒泡排序。四、詳細(xì)設(shè)計:1、創(chuàng)建窗口、菜單、工具欄、狀欄的函數(shù)。int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBa
11、r.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0("Failed to create toolbarn");return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndic
12、ators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0("Failed to create status barn");return -1; / fail to create/ TODO: Delete these three lines if you don't want the toolbar to/ be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&
13、m_wndToolBar);return 0; 2、鼠標(biāo)按下左鍵的響應(yīng)函數(shù)void CMyView:OnLButtonDown(UINT nFlags, CPoint point) /對鼠標(biāo)按下左鍵的相應(yīng)CScrollView:OnLButtonDown(nFlags, point);if(m_bDefineRect) /如果是自定義裁減的區(qū)域的操作SetCapture();/捕獲鼠標(biāo)m_bCaptured = TRUE;CDC *dc=GetDC();CRect rect(TopLeft,BottomRight);dc->SelectStockObject(WHITE_PEN);dc-
14、>Rectangle(rect);InvalidateRect(rect,false);TopLeft = point;:SetCursor(:LoadCursor(NULL, IDC_CROSS);/設(shè)置鼠標(biāo)樣子為十字形的if(m_bDefinePointV)/如果是自定義點坐標(biāo)的操作PointArray.Add(point);CRect ellipseRect;ellipseRect.top = point.y - 5;ellipseRect.bottom = point.y + 5;ellipseRect.left = point.x - 5;ellipseRect.right =
15、 point.x + 5;InvalidateRect(ellipseRect,true);3、鼠標(biāo)移動時的響應(yīng)函數(shù)void CMyView:OnMouseMove(UINT nFlags, CPoint point) CScrollView:OnMouseMove(nFlags, point);/對鼠標(biāo)移動時的相應(yīng)if (m_bCaptured) /畫出相應(yīng)的矩形裁減邊框CDC *dc=GetDC();CRect rect(TopLeft,BottomRight);dc->SelectStockObject(WHITE_PEN);dc->Rectangle(rect);/用白色擦
16、除原先的矩形邊框InvalidateRect(rect,false);BottomRight=point;CRect newrect(TopLeft,BottomRight);CPen pen;pen.CreatePen(PS_DOT,1,RGB(0,0,0);dc->SelectObject(pen);dc->Rectangle(newrect);/用虛線畫出新的矩形邊框 void CMyView:OnLButtonUp(UINT nFlags, CPoint point) CScrollView:OnLButtonUp(nFlags, point);/對鼠標(biāo)放開左鍵的響應(yīng) if
17、 (m_bCaptured) :ReleaseCapture(); m_bCaptured = false;m_bDefineRect = false;void CMyView:OnViewDefineRect() /設(shè)置是否自定義裁減區(qū)域m_bDefineRect = true;void CMyView:OnEditDefinePoint() /設(shè)置是否自定義點的坐標(biāo)m_bDefinePointV = true;4、放開鼠標(biāo)右鍵的響應(yīng)void CMyView:OnRButtonUp(UINT nFlags, CPoint point) /對鼠標(biāo)放開右鍵的相應(yīng)CScrollView:OnRBu
18、ttonUp(nFlags, point);if(m_bDefinePointV)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc->m_grahics.PointCount=PointArray.GetSize();if(pDoc->m_grahics.Point)delete pDoc->m_grahics.Point;pDoc->m_grahics.Point = new CPointpDoc->m_grahics.PointCount;for(int i=0;i<pDoc->m_grahi
19、cs.PointCount;i+)pDoc->m_grahics.Pointi=PointArray.GetAt(i);/對Point點坐標(biāo)重新賦值PointArray.RemoveAll();m_bDefinePointV=false;CRect rect;this->GetClientRect(rect);InvalidateRect(rect);/獲取新的初始裁減矩形范圍int minX = pDoc->m_grahics.Point0.x , minY = pDoc->m_grahics.Point0.y;int maxX = pDoc->m_grahic
20、s.Point0.x , maxY = pDoc->m_grahics.Point0.y;for(i=1;i<pDoc->m_grahics.PointCount;i+)if(minX > pDoc->m_grahics.Pointi.x)minX = pDoc->m_grahics.Pointi.x;if(minY > pDoc->m_grahics.Pointi.y)minY = pDoc->m_grahics.Pointi.y;if(maxX < pDoc->m_grahics.Pointi.x)maxX = pDoc-&
21、gt;m_grahics.Pointi.x;if(maxY < pDoc->m_grahics.Pointi.y)maxY = pDoc->m_grahics.Pointi.y;TopLeft = CPoint(minX,minY);BottomRight = CPoint(maxX,maxY);5、初始化函數(shù)void CMyView:OnInitialUpdate()CScrollView:OnInitialUpdate();CSize sizeTotal;sizeTotal.cx = sizeTotal.cy = 100;SetScrollSizes(MM_TEXT, s
22、izeTotal);CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/設(shè)置初始的裁減區(qū)域int minX = pDoc->m_grahics.Point0.x , minY = pDoc->m_grahics.Point0.y;int maxX = pDoc->m_grahics.Point0.x , maxY = pDoc->m_grahics.Point0.y;for(int i=1;i<pDoc->m_grahics.PointCount;i+)if(minX > pDoc->m_grahic
23、s.Pointi.x)minX = pDoc->m_grahics.Pointi.x;if(minY > pDoc->m_grahics.Pointi.y)minY = pDoc->m_grahics.Pointi.y;if(maxX < pDoc->m_grahics.Pointi.x)maxX = pDoc->m_grahics.Pointi.x;if(maxY < pDoc->m_grahics.Pointi.y)maxY = pDoc->m_grahics.Pointi.y;TopLeft = CPoint(minX,minY
24、);BottomRight = CPoint(maxX,maxY);6、重畫窗口的函數(shù),是MFC自動生成的,我們可以在里面添加自己的代碼,用來實現(xiàn)消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereint left,top,right,buttom;left=min(TopLeft.x,BottomRight.x);right=max(TopLeft.x,Bot
25、tomRight.x);top=min(TopLeft.y,BottomRight.y);buttom=max(TopLeft.y,BottomRight.y);CRect rect(left,top,right,buttom);/定義裁減矩形區(qū)域,并賦值CPen penDot,penSolid;penDot.CreatePen(PS_DOT,1,RGB(0,0,0);pDC->SelectObject(penDot);pDC->Rectangle(rect);/用虛線畫出裁減矩形區(qū)域penSolid.CreatePen(PS_SOLID,1,RGB(0,0,0);pDC->
26、SelectObject(penSolid);if(PointArray.GetSize()/當(dāng)自定義多邊形點坐標(biāo)時,在各個點坐標(biāo)處畫一個小圓,以顯示點的位置int i;for(i=0;i<PointArray.GetSize();i+)pDC->MoveTo(PointArray.GetAt(i);CRect ellipseRect;ellipseRect.top = PointArray.GetAt(i).y - 5;ellipseRect.bottom = PointArray.GetAt(i).y + 5;ellipseRect.left = PointArray.GetA
27、t(i).x - 5;ellipseRect.right = PointArray.GetAt(i).x + 5;pDC->Ellipse(ellipseRect);if(pDoc->bCutRect) /判斷是否裁減,若是,則根據(jù)裁減區(qū)域進行裁減pDoc->m_grahics.CutRect(rect);pDoc->bCutRect=false;pDoc->m_grahics.DrawPloyon(pDC);/畫出多邊形if(pDoc->bFillPloyon)/判斷是否填充,根據(jù)需要進行相應(yīng)的操作pDoc->m_grahics.FillPloyon
28、(pDC);pDoc->bFillPloyon=false;7、在指定的pDC設(shè)備中,畫多邊形bool CGraphics:DrawPloyon(CDC* pDC)if(PointCount < 3)return false;/若多邊形小于三個點則返回pDC->MoveTo(Point0);for(int i=1;i<PointCount;i+)pDC->LineTo(Pointi);pDC->LineTo(Point0);/在pDC中畫出多邊形return true;8、填充多邊形函數(shù),重量級的函數(shù)/在指定的pDC設(shè)備中,填充多邊形bool CGraphi
29、cs:FillPloyon(CDC* pDC)if(PointCount < 3)return false;/若多邊形小于三個點則返回int minX = Point0.x , minY = Point0.y;int maxX = Point0.x , maxY = Point0.y;for(int i=1;i<PointCount;i+)if(minX > Pointi.x)minX = Pointi.x;if(minY > Pointi.y)minY = Pointi.y;if(maxX < Pointi.x)maxX = Pointi.x;if(maxY &
30、lt; Pointi.y)maxY = Pointi.y;/獲取多邊形中所有坐標(biāo)點的最大值和最小值,作為掃描線循環(huán)的范圍CUIntArray myArray;int x,y;for(y=minY;y<maxY;y+)/掃描線從minY開始到maxYfor(i=0;i<PointCount;i+)/對每條邊進行循環(huán)CPoint PointCross;int beforeI=BeforeIndex(i),afterI=AfterIndex(i);/判斷是否跟線段相交if(InterCross(PointbeforeI,Pointi,CPoint(minX,y),CPoint(maxX,
31、y),PointCross)/若是存在交點,則進行相應(yīng)的判斷,即判斷x的坐標(biāo)取兩次、一次還是不取if(PointCross=Pointi)if(PointbeforeI.y > PointCross.y) && (PointafterI.y > PointCross.y)myArray.Add(PointCross.x);myArray.Add(PointCross.x);/邊頂點的y值大于交點的y值,x坐標(biāo)取兩次elseif(PointbeforeI.y - PointCross.y) * (PointafterI.y - PointCross.y) < 0
32、)myArray.Add(PointCross.x);/邊頂點的y值在交點的y值之間,即一個頂點的y值大于交點的y值,而另一個小于,相應(yīng)的x坐標(biāo)取一次elseif(PointCross.y=PointafterI.y)myArray.Add(PointCross.x); else if(PointCross=PointbeforeI)continue;elsemyArray.Add(PointCross.x);/當(dāng)交點不在線段的頂點時,x坐標(biāo)只取一次int *scanLineX,num=myArray.GetSize();scanLineX = new intnum;for(i=0;i<
33、num;i+)scanLineXi=myArray.GetAt(i);/獲取掃描線x值,以構(gòu)成填充區(qū)間myArray.RemoveAll();SortArray(scanLineX,num);/對scanLine(掃描線x坐標(biāo)進行排序)for(i=0;i<num;i=i+2)if(i+1>=num)break;for(x=scanLineXi;x<scanLineXi+1;x+)/x值配對填充pDC->SetPixelV(CPoint(x,y),RGB(255,0,0);/將填充區(qū)間相應(yīng)點的顏色設(shè)置成紅色 Sleep(1);/CPU暫停1ms,以體現(xiàn)出多邊形是以掃描線的
34、方式,一條一條的填充的delete scanLineX;return true;9、裁剪多邊形的函數(shù),重量級的函數(shù)bool CGraphics:CutRect(CRect rect)CPoint rectPoint4;rectPoint0.x = rect.left;rectPoint0.y = rect.top;rectPoint1.x = rect.right;rectPoint1.y = rect.top;rectPoint3.x = rect.left;rectPoint3.y = rect.bottom;rectPoint2.x = rect.right;rectPoint2.y =
35、 rect.bottom;/獲取裁減矩形的四個點的坐標(biāo),第一個點為左上,第二個點為右上,第三個點為右下,第四個點為左下int i;CArray<CPoint,CPoint&> myArray;/裁減后,保存的多邊形的依次各點的坐標(biāo)for(int rectNum=0;rectNum<4;rectNum+)/對裁減矩形的四條邊進行循環(huán)for(i=0;i<PointCount;i+)/對每條邊進行循環(huán)CPoint PointCross;int beforeI=BeforeIndex(i),afterI=AfterIndex(i);int afterrectNum =
36、(rectNum = 3)?0:rectNum+1);/判斷是否跟線段相交if(InterCross(PointbeforeI,Pointi,rectPointrectNum,rectPointafterrectNum,PointCross)if(PointCross=Pointi)myArray.Add(Pointi);/交點在線段上,直接添加點坐標(biāo)在保存多邊形的數(shù)組中else if(PointCross=PointbeforeI)if(IsInSquareRgn(rect,Pointi,rectNum)myArray.Add(Pointi);/判斷是否可視,若是,則添加點坐標(biāo)elsemyA
37、rray.Add(PointCross);/跟線段相交,但交點不在頂點上,添加交點坐標(biāo)if(IsInSquareRgn(rect,Pointi,rectNum)myArray.Add(Pointi);/判斷是否可視,若是,則添加點坐標(biāo)elseif(IsInSquareRgn(rect,Pointi,rectNum)myArray.Add(Pointi);/線段不相交,但需判斷是否可視,若是,則添加點坐標(biāo)PointCount=myArray.GetSize();if(Point)delete Point;Point = new CPointPointCount;for(i=0;i<Poin
38、tCount;i+)Pointi=myArray.GetAt(i);/重新賦予點坐標(biāo)的值myArray.RemoveAll();return true;10、判斷判斷兩條線段是否相交的函數(shù)bool CGraphics:InterCross(CPoint objectP1,CPoint objectP2,CPoint scanP1,CPoint scanP2,CPoint& coordinate)/objectP1、objectP2是一條線段的頂點坐標(biāo),而scanP1、scanP2是另一條線段的頂點坐標(biāo)if(objectP1 = objectP2)return false;/若objec
39、tP1、objectP2相等,則構(gòu)不成線段,退出if(scanP1 = scanP2)return false;/若scanP1、scanP2等,則構(gòu)不成線段,退出if( ( objectP1.y - objectP2.y ) * ( scanP1.x - scanP2.x )= ( scanP1.y - scanP2.y ) * ( objectP1.x - objectP2.x)/對斜率相等的情況下的處理if(objectP1.y-objectP2.y)*(scanP1.x-objectP1.x)=(objectP1.x-objectP2.x)*(scanP1.y-objectP1.y)/
40、判斷兩條線段是不是同一條線段coordinate=objectP2;return true;elsereturn false;if(objectP1.x = objectP2.x)/當(dāng)?shù)谝粭l線段斜率不存在是的,處理辦法double x,y;x = objectP1.x;y = (scanP1.y-scanP2.y)*1.0/(scanP1.x-scanP2.x)*(objectP1.x-scanP1.x)+scanP1.y;y = (float)(int)(y+0.5);if(objectP1.y-y)*(y-objectP2.y)>=0) && (objectP1.x-
41、x)*(x-objectP2.x)>=0)/判斷交點是不是在該兩條線段上coordinate.x = objectP1.x;coordinate.y = (int)(y+0.5);return true;return false;elseif(scanP1.x = scanP2.x)/當(dāng)?shù)诙l線段斜率不存在是的,處理辦法double x,y;x = scanP1.x;y = (objectP1.y-objectP2.y)*1.0/(objectP1.x-objectP2.x)*(scanP1.x-objectP1.x)+objectP1.y;y = (float)(int)(y+0.5)
42、;if(objectP1.y-y)*(y-objectP2.y)>=0) && (objectP1.x-x)*(x-objectP2.x)>=0)/判斷交點是不是在該兩條線段上coordinate.x = scanP1.x;coordinate.y = (int)(y+0.5);return true;return false;else/兩條線段斜率都存在時的處理辦法double k1,k2;k1 = ( objectP1.y - objectP2.y ) * 1.0 / ( objectP1.x - objectP2.x);k2 = ( scanP1.y - scanP2.y ) * 1.0 / ( scanP1.x - scanP2.x );/k1,k2為計算的兩線段的斜率double x,y;x = (scanP1.y-objectP1.y-k2*scanP1.x+k1*objectP1.x)/(k1-k2);y = (k1*k2*scanP1.x-k1*k2*objectP1.x+k2*objectP1.y-k1*scanP1.y)/(k2-k1);x=(float)(int)(x+0.5);y = (float)(int)(y+0.5);
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)天培小學(xué)期末數(shù)學(xué)試卷
- 阜陽市2024中考數(shù)學(xué)試卷
- 高三零模數(shù)學(xué)試卷
- 2025年海南保亭黎族苗族自治縣醫(yī)療集團考核招聘派駐保亭縣看守所駐所醫(yī)師1人(第1號)筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025年04月陜西漢中市鐵路中心醫(yī)院招聘崗位0102擬聘人選筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025至2030船舶制造產(chǎn)業(yè)深度調(diào)研及前景趨勢與投資報告
- 2025至2030櫥柜行業(yè)市場發(fā)展現(xiàn)狀及并購重組策略與投融資報告
- 2024年廣西職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試真題
- 2025至2030超薄CRT彩電行業(yè)發(fā)展分析及前景趨勢與投資報告
- 2025至2030茶袋紙行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 河南省安全員C證考試題庫及答案
- 青海省化工企業(yè)分類分級監(jiān)督管理規(guī)定
- 高效工作八大技能
- 2023年松潘縣小升初英語考試題庫及答案解析
- 2022年環(huán)江毛南族自治縣小升初英語考試試題及答案解析
- 北京市高考外語口試《外語口試題集》
- 某頂管計算書
- T-GDSCEE 109-2022 數(shù)字音頻功率放大器通用規(guī)范
- GB/T 40080-2021鋼管無損檢測用于確認(rèn)無縫和焊接鋼管(埋弧焊除外)水壓密實性的自動電磁檢測方法
- GB/T 15452-2009工業(yè)循環(huán)冷卻水中鈣、鎂離子的測定EDTA滴定法
- 一二三四級應(yīng)急響應(yīng)流程圖參考模板范本
評論
0/150
提交評論