我們需要解決的問題:
給定直線兩端點A(Xa,Ya),B(Xb,Yb),然後畫出這個條直線。
首先介紹一個DDA算法(digital differential analyzer):
△x= xb - xa , △y=yb-ya。
設pi-1(xi-1,yi-1)點在AB直線上,若pi(xi,yi)點也在該直線上,則兩直角三角形相似,設比例係數爲ε,則小角形橫、縱軸長爲: εΔx, εΔy。
則pi點的座標爲:
(i=1,2,3,···,n)
下面確定ε的取值 :
根據公式寫出直線上第1,2,3,···n,點的座標,
特別是第n點的座標,有 :
爲使直線的第n點與直線的終點重合,令:
得n*ε=1, 則 ε=1/n,其中n爲繪點的個數
但是,合理選擇爲(考慮到分辨率):
n=max{|△x|,|△y|}
爲了逼近理想直線,可以對每點座標進行四捨五入處理,即:
其中[ ]符號表示取小於括號內的最小整數值。
以下使用matlab畫出使用DDA算法得到了直線:
function DDA_plot(x1,y1,x2,y2)
length=abs(x2-x1);
if abs(y2-y1)>length
length=abs(y2-y1);
end
dx=(x2-x1)/length;
dy=(y2-y1)/length;
x=x1+0.5*sign(dx);
y=y1+0.5*sign(dy);
xlist=[];
ylist=[];
xlist(1)=x;
ylist(1)=y;
for i=2:length
x=x+dx;
y=y+dy;
xlist(i)=x;
ylist(i)=y;
end
plot(round(xlist),round(ylist));
得到結果如下:輸入(1,1,10,10),畫出(1,1)到(10,10)的直線