数值微分DDA法 基本思想 已知过端点PO(xO,y0,P1(x1,y1)的直线段L y=kx+b 直线斜率为 x=x→x1;x=x+ stepx y=kx+b (x,rond(少) 这种方法直观,但效率太低,因为每一步需要一次浮点乘法 和一次舍入运算。 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 数值微分(DDA)法 •基本思想 已知过端点P0 (x0, y0), P1(x1, y1)的直线段L y=kx+b 直线斜率为 这种方法直观,但效率太低,因为每一步需要一次浮点乘法 和一次舍入运算。 1 0 1 0 x x y y k − − = ( , ( )) ; 0 1 x round y y k x b x x x x x stepx = + 令 = → = +
数值微分①DDA法 计算y1+1=kx1+1+b =kx:+b+k△x y+k△x 当△x=1;y1+1=y;+k 即:当x每递增1,y递增k(即直线斜率); 注意上述分析的算法仅适用于k≤1的情形。 在这种情况下,x每增加12y最多增加1。 当k>1时,必须把x,y地位互换 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 数值微分(DDA)法 计算yi+1= kxi+1+b = kxi+b+kx = yi+kx 当x =1; yi+1 = yi+k • 即:当x每递增1,y递增k(即直线斜率); • 注意上述分析的算法仅适用于k ≤1的情形。 在这种情况下,x每增加1,y最多增加1。 • 当 k 1时,必须把x,y地位互换
数值微分①DDA法 增量算法:在一个迭代算法中,如果每 步的x、y值是用前一步的值加上一个 增量来获得,则称为增量算法 DDA算法就是一个增量算法 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 数值微分(DDA)法 • 增量算法:在一个迭代算法中,如果每 一步的x、y值是用前一步的值加上一个 增量来获得,则称为增量算法。 • DDA算法就是一个增量算法
数值微分ODDA法 void ddaline(int xo, int yo, int xI, int y1, int color) i int x; float dx, dy, y, k dx y-y1-y k=dy/dx; y=yo for(x=X0;X≤x1,X+) i drawpixel(x, int(y+0. 5), color) /y+k 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 数值微分(DDA)法 void DDALine(int x0 ,int y0 ,int x1 ,int y1 ,int color) int x; float dx, dy, y, k; dx = x1 -x0 ; dy=y1 -y0 ; k=dy/dx; y=y0 ; for (x=x0 ; xx1 , x++) drawpixel (x, int(y+0.5), color); y=y+k;
数值微分DDA法 例:画直线段P(0,0)-P(5,2) x int(y+0. 5) 0.5 Line:PO(0,0)-P1(5,2) 00 0+0.5 0.4+0.5 0.8+0.5 2345 1.2+0.5 1.6+0.5 012345 2.0+0.5 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 数值微分(DDA)法 • 例:画直线段P0(0,0)--P1(5,2) x int(y+0.5) y+0.5 0 0 0+0.5 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 5 2 2.0+0.5 0 1 2 3 4 5 3 2 1 Line: P0(0, 0)-- P1(5, 2)