DDA算法
-
我們都知道兩點確定一條直線,所以假設(x1,y1),(x2,y2)爲需要生成直線的兩點,
-
分別求出x方向上的增量和y方向上的增量,記做dx和dy,即dx=x2-x1,dy=y2-y1
-
同時我們還知道直線的斜率k=(y2-y1)/(x2-x1),即k=dy/dx
-
我們可以發現得到dx、dy、k 之後直線上每一點的座標都可由前一個點座標推算出來。
-
如已知直線y=2x上的點(1,2),dx=0.1,求(1,2)的下一個點
∵ y=kx,即y=2x
且x=1+dx=1.1
∴ x爲1.1的縱座標爲2.2,即該點爲(1.1,2.2) -
另外,我們求出dx和dy的最大值,作爲前進方向,按上述方法把所有求出的點取整後畫出
,最終生成的圖案就是一條直線
matlab小知識
scatter(2,3,'.')
畫一個點
grid on
生成背景圖中的網格
grid minor
生成背景圖中的小網格
round(x)
對x四捨五入取整
hold on
維持之前畫的圖像不消失(因爲我們是一個一個點畫上去的,要保留之前的圖像纔行)
hold off
在這之後就不保留圖像了,如果這之後還有圖像就只顯示這之後的(與end類似)
matlab實現
function DDA(x1,y1,x2,y2,color)
dx=(x2-x1);
dy=(y2-y1);
step=max(abs(dx),abs(dy));
deltax=dx/step;
deltay=dy/step;
x=x1;
y=y1;
hold on
for i=1:step
scatter(round(x),round(y),'.',color)
x=x+deltax;
y=y+deltay;
end
plot([x1-20,x2-20],[y1-20,y2-20])
grid minor
hold off
end
上方爲直接繪出圖像,下方爲DDA生成的直線