計算機圖形學學習(一) DDA算法講解及matlab實現

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生成的直線
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章