这是我学习的笔记吧···以前学习过,但是现在准备再次认真学习下。
1、直线生成算法
直线DDA算法(digital Differential Analyser)
<!--[if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
1)设直线的起点为(x1,y1)中点为(x2,y2),斜率为M。
M=(Y2-Y1)/(X2-X1)=Dy/Dx
2)直线的每一点坐标都可以由前一点的坐标变化一个增量(Dx,Dy)而得到,如下<!--[if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
Xi+1 = Xi+Dx
Yi+1 = Yi+Dy
3)比较DX与DY的大小,设置为较小的为STEP,例如(|DX|<|DY|)那么STEP=DX
计算单位像素下DY(如果|DX|>|DY|就是DX)的变化 DELTAL_DY=DY/STEP
然后从起点开始画线。
bresenham算法
比较重要看书吧····打字太麻烦了·= =